2.3 KiB
ActionRPG中的文件夹结构
Ability
|——DataTables (数据表)
|——Enemies (敌人的能力)
|——Player (玩家的能力)
└──Shared (继承c++父类的基础蓝图类)
需要实现的基础能力类
GA_MeleeBase GA_PotionBase GA_Skill GE_DamageBase GE_DamageImmune GE_HealBase GE_MeleeBase GE_RangedBase GE_StatsBase
武器类实现
其中主要的攻击逻辑位于WeaponActor中。(ActionRPG中是WeaponActor引用DataAsset) 基础的DataAsset用于设置数据(GameplayAbility)以及关联需要加载Asset。
攻击判定
OverlapBegin: 对进入判定区域的Actor发送hit信息,也就是GameplayEventData,里面带有事件类型(攻击类型)、施放者与目标。 OverlapEnd:用于重置OverlapBegin中的DoOnce判断。
BeginWeaponAttack:设置初始相关变量,设置IsAttacking为true,开启碰撞判断 EndWeaponAttack:设置IsAttacking为false,关闭碰撞判断。
伤害以及队伍判定
队伍判定可以使用GameplayEffect做成Buffer进行判断,之后再使用计算类或者修改类进行伤害计算。
关于GA_MeleeBase部分
执行PlayMontage And Wait for Event(GameplayTasks),播放Montage, 如果在执行过程中发生了事件则会执行应用GameplayEffect事件。如果发出的Gameplay事件与传入的 EventTags 匹配,将使用标记和有效负载激活 EventReceived 执行引脚,然后调用 ApplyEffectContainer 函数。
GA_MeleeBase的EffectContainerMap会设置EventTag与GameplayEffect的map。PlayMontage And Wait for Event会根据接收到EventTag对目标对象赋予GameplayEffect.
这些EventTag是从Montage中的AnimNotify中赋值给WeaponActor,之后再调用WeaponActor的BeginAttack事件。
RPGtargetType类
从武器类中得到的GameplayEventData数据中提取到目标的Actor指针。
角色类与敌人类的实现
连击逻辑
如果处于能施放能力状态下,再进行是否处于连击状态判断,之后选择激活武器能力或者跳转MontageSection。
个人觉得连击的逻辑与变量还是放在武器类中比较好。 AnimNotiy里控制下一个MontageSection变量与偏移事件。相关的变量与计时在武器类中。
GameMode与GameInstance逻辑
GameMode编写控制游戏开始与结束的逻辑,对于Demo可以编写角色重生与死亡后的逻辑。