BlueRoseNote/05-SDHGame/ActionRPG时代的设计/GameplayAbility与角色类武器类逻辑.md
2023-06-29 11:55:02 +08:00

2.3 KiB
Raw Permalink Blame History

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 EventGameplayTasks播放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可以编写角色重生与死亡后的逻辑。