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