Tizeng's blog Ordinary Gamer

Gaia笔记3——GAS

2021-01-16
Tizeng

有关GAS的笔记移至单独的文档。

项目应用实例

冷却时间(2022.5.9)

在释放技能后,有一段时间内不能再次释放,也就是常说的cd,在GAS框架下,cd的实现是通过为每个GA定义一个专门区分cd的标签,以及cd的时长,然后在玩家身上挂一个GE,通过SetByCaller的方式设置其持续时间(Duration),同时将GA上配置的标签也给到该GE,这样就无需重复定义cd用的GE了。 在释放技能走到CommitAbility后会执行ApplyCooldown,给玩家上冷却的GE。当前剩余cd时间可以用GetCooldownTimeRemaining等接口通过一个FGameplayEffectQuery和ASC和中储存的当前激活的GE进行比对,得到结果后再通过计算当前时间和该GE的开始时间的插值,拿到该GE的剩余持续时间。

伤害流程(2022.4.8)

梳理一下从玩家点击射击按钮开始,到开枪,判断是否击中,扣怪的血量的流程。

InputComponent:GameMode初始化游戏时会遍历所有Controller,调用RestartPlayer,在起始位置Spawn角色(GameMode中配置了类),进行Possess等操作,最终通知客户端调用ClientRestart生成InputComponent。Controller上也会在初始化时生成一个InputComponent,并在子类Controller中绑定各个输入Mapping对应的函数。

绑定输入后按键和ui便可触发WeaponActor上的开枪方法,枪械Actor上的EffectComponent负责生成子弹(即Projectile,子弹的类型通过PropertyComponent来配置配置),子弹的各项属性会事先计算好,然后子弹Actor身上的MoveComponent驱动它移动,检测到碰撞时通过物理材质(Physical Material)的类型可以做一些逻辑判断,如果击中npc则通知玩家的Controller给该npc上一个伤害GE。

GE上的Execution类会处理具体的伤害逻辑,其中需要用到玩家和NPC身上的某些属性,可以在Execution初始化时Capture到。

持续开枪

在Player输入初始化时也可以将输入绑定到ASC。

NPC受击

连击计数实现整理(2021.10.18)

这个功能很多游戏都有,击杀达到一定数量后进入连击状态并倒计时,此时打空扣时间,打中将时间补满,连击状态中每击杀一个怪连击数加1(或其他值),如果倒计时结束,则进行结算。

NPC跳跃扑倒(2022.5.23)

首先有一个跳跃GA,应该是由行为树释放,有专门配置的伤害GE,和之前的Execution类似的计算,然后是一个用来使玩家倒地的GE,这个GE会让玩家释放一个BeControlled的GA(granted),释放之后玩家就一直播放倒地动画,等控制结束或被打断,就移除这个GE,连带将BeControlled的GA一并移除(Remove Ability On End)。

近战攻击


Similar Posts

Comments