作为学习记录用,关于Lyra GAS方面的解析,大致分析了一下从枪械开火到影响伤害的大致流程。
1. 武器及武器属性
基类
Lyra的武器全部继承自ULyraEquipmentDefinition : UObject这个类

这里面分别有三个变量,分别是武器装备实例,武器被赋有的能力,用AbilitySet存储,以及在被装备时要生成数组。
ULyraEquipmentInstance
主要是枪械的射击参数(扩散,子弹量等等),装弹等的蒙太奇,链接动画层等等和枪械本身相关属性的杂项。
使用GA时会从里面读相关需要的属性。不直接写在GA里面也是解耦了
FLyraEquipmentActorToSpawn

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

装备时Spwan以及附加。

这个武器蓝图主要是一些武器表现特效等等,逻辑大多直接写在蓝图里面。
2. 使用武器(触发扳机)
Player处理InputTag递交AbilitySystemComp


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



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


怎么知道按键对应的是哪个GA呢?
重点在这个上面
// 处理保留其输入的能力。
TArray<FGameplayAbilitySpecHandle> InputHeldSpecHandles;


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


这个函数主要干了三件事:
- 射线检测目标获得碰撞数据
- 整理新数据格式(增加随机子弹ID)
- 作用对象的回调(在蓝图中处理伤害)
射线检测细节
主要是关于枪械的一些属性影响射线检测方式,此处先略过。
伤害传递回调

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

主要是先检查提交,提交冷却和消耗。冷却和消耗都不在这里处理所以略过。
关于枪械的开火细节和伤害递交

这块主要还是写在蓝图里了。可能是为了方便调用GC。
这里主要拿射线检测到的东西做处理给GC用,包括开火的细节(特效),打到不同表面的声音。

Comments NOTHING