0
点赞
收藏
分享

微信扫一扫

UE5/C++ 基于GAS的角色升级 7.1 准备好经验值属性

J简文 2022-02-14 阅读 82
ue5c++ue4

1.

打开MMOARPGAttributeSet.h,增加经验值属性

UPROPERTY(BlueprintReadOnly, Category = "Attribute", ReplicatedUsing = OnRep_EmpiricalValue)
FGameplayAttributeData EmpiricalValue;//经验值
ATTRIBUTE_ACCESSORS(UMMOARPGAttributeSet, EmpiricalValue)

UPROPERTY(BlueprintReadOnly, Category = "Attribute", ReplicatedUsing = OnRep_MaxEmpiricalValue)
FGameplayAttributeData MaxEmpiricalValue;//最大经验值
ATTRIBUTE_ACCESSORS(UMMOARPGAttributeSet, MaxEmpiricalValue)

2.

绑定OnRep函数,属性值更改时调用

	UFUNCTION()
	virtual void OnRep_EmpiricalValue(const FGameplayAttributeData& OldValue);

	UFUNCTION()
	virtual void OnRep_MaxEmpiricalValue(const FGameplayAttributeData& OldValue);

进行实现

void UMMOARPGAttributeSet::OnRep_EmpiricalValue(const FGameplayAttributeData& OldValue)
{
	GAMEPLAYATTRIBUTE_REPNOTIFY(UMMOARPGAttributeSet, EmpiricalValue, OldValue);
}

void UMMOARPGAttributeSet::OnRep_MaxEmpiricalValue(const FGameplayAttributeData& OldValue)
{
	GAMEPLAYATTRIBUTE_REPNOTIFY(UMMOARPGAttributeSet, MaxEmpiricalValue, OldValue);
}

3.

属性复制

virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

进行实现

void UMMOARPGAttributeSet::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(UMMOARPGAttributeSet, EmpiricalValue);
	DOREPLIFETIME(UMMOARPGAttributeSet, MaxEmpiricalValue);
}

4.

提前准备一个方法,用于将属性值提出

virtual void ToMMOARPGCharacterAttribute(FMMOARPGCharacterAttribute& OutData);

进行实现

void UMMOARPGAttributeSet::ToMMOARPGCharacterAttribute(FMMOARPGCharacterAttribute& OutData)
{
	//将属性值提取出来存放进OutData
	RegistrationParam(OutData.Level, Level);
	RegistrationParam(OutData.Health, Health);
	RegistrationParam(OutData.MaxHealth, MaxHealth);
	RegistrationParam(OutData.Mana, Mana);
	RegistrationParam(OutData.MaxMana, MaxMana);
	RegistrationParam(OutData.PhysicsAttack, PhysicsAttack);
	RegistrationParam(OutData.MagicAttack, MagicAttack);
	RegistrationParam(OutData.PhysicsDefense, PhysicsDefense);
	RegistrationParam(OutData.MagicDefense, MagicDefense);
	RegistrationParam(OutData.AttackRange, AttackRange);
	RegistrationParam(OutData.MaxEmpiricalValue, MaxEmpiricalValue);
	RegistrationParam(OutData.EmpiricalValue, EmpiricalValue);
}
举报

相关推荐

0 条评论