Lyra技术分析:输入方式与GAS技能触发
前言
本文研究一下Lyra技能系统的输入方式触发方式
传统的GAS技能触发方式
GAS中每个技能(GA)通过UAbilitySystemComponent::GiveAbility(const FGameplayAbilitySpec& Spec)
添加
在这个spec里面有一个int32 InputID;
成员变量, 这个是用来快捷触发技能用的
然后看技能组件内的代码
1 |
|
将一个枚举转换为int绑定到每个技能触发按键事件上
在收到回调事件后会进行判定并触发对应的inputID的技能
在UE4中, 可以直接将InputAction名称与这个枚举对应起来, 可以达到直接触发
EnhancedInput与GAS技能触发
UE5以后, 传统的InputAction已经被废弃, 这套绑定系统需要调整一下才能触发
实际上我们只需要将EnhancedInput的InputAction与一个枚举对应起来即可
比如建立一个TMap关系
TMap<EAbilityInputKey, UInputAction*>
然后重载BindAbilityActivationToInputComponent
事件, 如下
记得, 这个事件是需要手动去触发的, 比如在角色中触发
当然需要将技能与这个枚举建立起对应关系, 或者是在CDO中赋予成员变量, 或者再建立一个索引关系, 在注册技能的时候添加进去即可
那么这样以后, 配置好映射, 就可以正常触发对应的技能了
Lyra的技能触发方式
Lyra的技能触发是围绕Tag的, 即每个技能触发对应一个tag, 这样比枚举更加灵活
Lyra的角色配置使用的是一个叫PawnData的DataAsset
里面保存了ULyraInputConfig
用于配置输入
然后这个配置内保存了两组输入配置, 一组用于触发传统的比如移动的输入配置, 另一组用于技能, 我们重点就看技能
TArray<FLyraInputAction> AbilityInputActions;
Lyra使用了自定义的InputCompnent
, 添加了几个扩展的模板函数, 比如
因为源生的BindAction模板函数支持动态参数, Lyra就用此扩展了一个支持tag的输入绑定函数
在设置PawnData的时候就把输入配置注册好
在回调函数里直接调用自定义的ASC的对应事件
在ASC中, 输入事件过去的时候会将对应的技能句柄保存到一个数组中
然后在Controller驱动的ULyraAbilitySystemComponent::ProcessAbilityInput
函数中做统一处理
Lyra的GA类有一个成员变量用于定义这个技能的触发方式
1 | UENUM(BlueprintType) |
字面意思即可理解, 举个例子, reload技能是OnInputTriggered
在按下的时候只触发一次, 开火技能是按下以后一直触发直到松开按键, 被动技能可以设置为OnSpawn
在ASC初始化之后就可以触发