Lyra 射击GAS流程解析

最后更新于 2025-01-09 510 次阅读


作为学习记录用,关于Lyra GAS方面的解析,大致分析了一下从枪械开火到影响伤害的大致流程。

1. 武器及武器属性

基类

Lyra的武器全部继承自ULyraEquipmentDefinition : UObject这个类

这里面分别有三个变量,分别是武器装备实例,武器被赋有的能力,用AbilitySet存储,以及在被装备时要生成数组。

ULyraEquipmentInstance

主要是枪械的射击参数(扩散,子弹量等等),装弹等的蒙太奇,链接动画层等等和枪械本身相关属性的杂项。

使用GA时会从里面读相关需要的属性。不直接写在GA里面也是解耦了

FLyraEquipmentActorToSpawn

结构体里分别是武器的蓝图,绑定的骨骼名称以及绑定时的方向。

装备时Spwan以及附加。

这个武器蓝图主要是一些武器表现特效等等,逻辑大多直接写在蓝图里面。

2. 使用武器(触发扳机)

Player处理InputTag递交AbilitySystemComp

在HeroComp中绑定了增强输入,回调会处理相对应的GA
收到Tag时在对应容器中添加新的Handle

Tick中PlayerController发动AbilityComponent去处理关于GA的输入事件

随后在输入栈中读取上图的变量,将GA句柄解出来再TryActivateAbility
最后会清理这些数组

为什么要做这种逻辑分开的处理?

增强输入回调绑定的函数在响应上比tick中的playerinput要快,且同时绑定了按下和放开的回调,本身就是不同时间点的,方便统一处理。

怎么知道按键对应的是哪个GA呢?

重点在这个上面

// 处理保留其输入的能力。
TArray<FGameplayAbilitySpecHandle> InputHeldSpecHandles;

由得到输入tag与已激活的能力遍历Tag一一做匹配,把他加到上述数组中,这个数组会执行对应的GA。

3. 伤害手段

枪械能力激活的关键函数

这个函数主要干了三件事:

  • 射线检测目标获得碰撞数据
  • 整理新数据格式(增加随机子弹ID)
  • 作用对象的回调(在蓝图中处理伤害)

射线检测细节

主要是关于枪械的一些属性影响射线检测方式,此处先略过。

伤害传递回调

重点在这个函数中先主要通知了服务端(不知道干了些什么),再CommitAbility提交能力消耗,提交成功的话用之前处理好的数据给蓝图中应用伤害,比如应用配置的GE。

提交能力处理消耗

主要是先检查提交,提交冷却和消耗。冷却和消耗都不在这里处理所以略过。

关于枪械的开火细节和伤害递交

这块主要还是写在蓝图里了。可能是为了方便调用GC。

这里主要拿射线检测到的东西做处理给GC用,包括开火的细节(特效),打到不同表面的声音。

递交伤害的手段