UE中GamePlay技能模块使用
大概研究了一个星期的技能模块功能。虽然还不是很多,但是也学习了不少。
大概的一个依赖关系就是这样的,但是这些功能之间依旧可以项目去调用,从而实现更加复杂的功能。
官方文档文档中还对每个功能可以实现的功能进行了一定的说明,需要要的时候多看。
GamePlayAbility
授予和撤销技能
在Actor使用某项技能之前,必须向技能组件授予该技能
授予技能:GiveAbility/GiveAbilityAndAcitiveOnce 使用GamePlayAbilitySpec调用,返回FGameAbilitySpecHandle句柄
撤销技能:CleaeAbility/SetRemoveAbilityOnEnd/ClearAllAbilities 除了最后一个不需要通过GamePlayAbilitySpec来调用
基本用法
授予技能后,生命周期如下:
- 判断是否技能可用,CanActiveAbility
- 执行技能,CallActiveAbility
- 尝试执行,TryActiveAbility
- EndAbility
游戏属性FGamePlayAttribute
属性作为FGamePlayAttribute类型的Uproperty在UAttributeSet属性集中声明
属性集向技能系统进行注册,添加入拥有技能系统组件的Actor子对象或者将它传递给技能系统组件的GetOrCreateAttributeSubOject函数
游戏效果
更改属性方法,包括知识属性的底值进行更改、临时更改、随时间推移而应用的永久性更改(如在一定时间内或永久时间每秒回血)。设计为通过变量进行配置
技能任务UAbilityTask
他们在游戏性技能执行过程中执行异步工作,并通过调用委托(Delegate)或一个或多个输出执行引脚来影响执行流。
关于Spec
对于GamePlayAbility、GamePlayEffect在引擎中存在三个对象,CDO、Spec、Handle。