虚幻引擎5 GAS开发俯视角RPG游戏 P06-09 玩家等级与战斗接口
一.创建一个变量Level:
1.英雄在PlayState类
Source/CC_Aura/Public/Player/CC_PlayerState.h:
(1)定义变量
private:UPROPERTY(VisibleAnywhere, ReplicatedUsing = OnRep_Level)int32 Level;
(2)复制回调函数:
UFUNCTION()void OnRep_Level(int32 OldLevel);
void ACC_PlayerState::OnRep_Level(int32 OldLevel)
{}
(3)复制策略:
public:// 用于声明哪些变量需要在服务器和客户端之间自动复制virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
void ACC_PlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{Super::GetLifetimeReplicatedProps(OutLifetimeProps);DOREPLIFETIME(ACC_PlayerState, Level);
}
2.敌人在角色类
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Enemy Level")int32 Level;
二. 创建战斗接口:
1.创建接口函数:
Source/CC_Aura/Public/Interations/CC_CombatInterface.h:
public:virtual int32 GetCharacterLevel();
int32 ICC_CombatInterface::GetCharacterLevel()
{return 0;
}
2.角色基类继承接口:
class CC_AURA_API ACC_CharacterBase : public ACharacter,public IAbilitySystemInterface, public ICC_CombatInterface
3.敌人类实现接口函数:
Source/CC_Aura/Public/Characters/CC_EnemyCharacter.h
/*ICC_CombatInterface接口函数:* 1.获取角色等级*/
#pragma region ICC_CombatInterfacevirtual int32 GetCharacterLevel() override;#pragma endregion
int32 ACC_EnemyCharacter::GetCharacterLevel()
{return Level;
}
4.英雄类实现战斗接口函数:
/*ICC_CombatInterface接口函数:
* 1.获取角色等级
*/
#pragma region ICC_CombatInterfacevirtual int32 GetCharacterLevel() override;#pragma endregion
int32 ACC_HeroCharacter::GetCharacterLevel()
{if (CCPlayerState == nullptr){CCPlayerState = GetPlayerState<ACC_PlayerState>(); //获取玩家状态}return CCPlayerState->GetCharacterLevel();
}
显然,我们要先在CCPlayerState类里定义GetCharacterLevel()函数:
Source/CC_Aura/Public/Player/CC_PlayerState.h
public:FORCEINLINE int32 GetCharacterLevel() const {return Level;}