准备工作
使用UE5.2和Vs2022.
GAS全名为Gameplay Ability System,是UE官方提供的一套技能系统,用于将角色的属性技能等于角色进行解耦方便扩展和修改,使用GAS要求为C++项目。
新建一个C++的空项目,在编辑器中搜索Ability System启动插件,在Build.cs中添加”GameplayTasks”,”GameplayAbilities”和”GameplayTags”三个模块。
重新启动项目,就可以使用GAS了。
GAS的一些基础知识
GAS的一个核心组件是AbilitySystemComponent(ASC),绝大多数关于技能的操作都要依赖于它。
使用各种技能需要GameplayAbility(GA),它是一个技能基类,可以用于派生处各种技能。
关于技能的描述也触发,UE使用的是GameplayTag标签系统来完成,由GameplayTagContainer来存储,在连击的制作的同样使用不同的Tag来完成激活。
GameplayEffect(GE)主要用于描述技能效果,如各种各样的Buff效果,需要应用的伤害。
AttributeSet用于存放角色的属性,用于计算技能伤害、消耗等。
此外GAS还包括碰撞检测、音效、特效等等,这些通过GameplayCue来实现。
制作第一个技能
首先在C++中添加技能组件并提供添加技能的配置项:
1 | class AMainCharacter:public ACharacter,public IAbilitySystemInterface |
回到UE中,制作一个GA,继承GameplayAbility来实现一个播放蒙太奇的技能:
直接在ActivateAbility后选择播放蒙太奇并填入相应动画即可。
技能触发选择使用GameplayTag,其中主要用到的是AbilityTag、ActivationOwnedTag。前者是属于该技能的标签;而后者用于激活该技能,当技能持有该标签时可以由TriggerEvent进行激活。
在回到主角的动画在Abilities中添加该技能,可以在蓝图中配置一个输出调用技能组件的ActivateAbilityByTag函数来触发技能,
或者在输入中配置该技能的触发。
制作连击
实现方法
制作连击的核心逻辑是首先判断当前角色是否处于攻击状态,如果没有,则触发第一段攻击,否则判断是否处于能够连击状态,如果是则可以进入下一段,否则就继续等待。
使用伪代码表示为:
1 | void Attack() |
bCanCombo和bAttacking使用GameplayTag来作为可以攻击状态的Buff,并且它们的状态由动画通知来更改。
具体代码
制作一个可供判断连击的GA
创建一个继承自GameplayAbility的GA,并做出如下设置:
1 | // 使用数据表存储攻击动画数据 |
在cpp中给出实现:
1 | int32 UGA_Combo::ComboCount = 0; |
最后在输入时触发这个GA即可
参考
CSDN:https://blog.csdn.net/xcinkey/category_11430365.html
文章中包含了对GAS的一些简单介绍以及制作连击的方法
Github:https://github.com/BillEliot/GASDocumentation_Chinese
这是由大佬翻译的GAS的一个民间文档,其中有更详细的介绍和使用
- 本文作者: KongXinQing
- 本文链接: https://13114987559.github.io/2024/03/17/essay/初步使用GAS/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!