UE 5 GAS Gameplay Ability System

游戏技能系统 简称(GAS),是一个健壮的,高度可扩展的gameplay框架,通常用于构件RPG、MOBA等游戏的完整战斗逻辑框架。
通过GAS,可以快速地制作游戏中的主动/被动技能、各种效果Buff、计算属性伤害、处理玩家各种战斗状态逻辑。

开启GAS

GAS是ue内置的插件,需要在插件里开启
在这里插入图片描述

GAS 提供的功能

  1. 实现了带有消耗和冷却功能的角色技能
  2. 处理数值属性(生命、魔法、攻击力、防御力)
  3. 应用状态效果(击飞、着火、眩晕)
  4. 应用游戏标签(GameplayTags 游戏内置)
  5. 生成特效和音效
  6. 完整的网络复制、预测功能

Ability System Component

Ability System Component(ASC)是整个GAS的基础组件。

ASC本质上是一个UActorComponent,用于处理整个框架下的交互逻辑,包括
使用技能GA(GameplayAbility)包括攻击、疾跑、施法、翻滚、使用道具等,但不包括基础移动和UI
包含属性AS(AttributeSet)角色身上可以用float表示的属性,如生命值、体力值、魔力值等
处理各种效果GE(GameplayEffect)用于修改属性,如增加50移动速度10s;还能配合GA实现更多玩法
GC(Gameplay Cues) 播放特效、音效等

所有需要应用GAS的对象(Actor),都必须用于GAS组件。
拥有ASC的Actor本称为ASC的OwnerActor,ASC实际作用的Actor叫做AvatarActor。
ASC可以被赋予某个角色ASC,也可以被赋予PlayerState(可以保存死亡角色的一些数据)

GameplayTags

GameplayTags 是一种层级标签,通过GameplayTagManager进行注册。它不属于GAS的功能,是内置在UE中。
UE 5 GAS Gameplay Ability System_第1张图片
它可以替代原本的Bool或Enum的结构,可以在玩法设计中更高效的标记对象的行为或状态。

Gameplay Ability

Gameplay Ability(GA)标识了游戏中的一个对象(Actor)可以做的行为或技能。
能力(Ability)可以是普通攻击或者吟唱技能,可以是角色被击飞倒地,还可以是使用某种道具,交互某个物件,甚至跳跃、飞行等角色行为也可以是Ability。
Ability可以被赋予对象或从对象的ASC中移除,对象同时可以激活多个GameplayAbility。
基本的移动输入、UI交互行为不能或不建议通过GA来实现。

UE 5 GAS Gameplay Ability System_第2张图片
技能制作需要继承至插件内置的GameplayAbility类,里面事件触发回调以及事件结束回调。
触发相应的技能需要使用ASC的方法去调用
UE 5 GAS Gameplay Ability System_第3张图片
在触发技能之前,可以根据自己的需求设置是否触发当前的技能。
UE 5 GAS Gameplay Ability System_第4张图片

Gameplay Effect

Gameplay Effect(GE)是Ability对自己或他人产生影响的途径。
GE通常可以被理解为我们游戏中的buff。比如增益/减益效果(修改属性)。
但是GAS中的GE也更为广义,释放技能时候的伤害结算,施加特殊效果的控制、霸体效果(修改GameplayTag)都是通过GE来实现的。
GE相当于一个可配置的数据表,不可以添加逻辑。开发者创建一个UGameplayEffect的派生蓝图,就可以根据需求制作想要的效果。
创建GE需要继承GameplayEffect
UE 5 GAS Gameplay Ability System_第5张图片
它只是一个纯数据蓝图,不处理逻辑,所以有用的就是配置里面的配置项的修改。

Attribute Set

AttributeSet(AS) 负责定义和持有属性,并且管理属性的变化,包括网络同步。
需要在Actor中被添加为成员变量,并注册到ASC(C++)。
一个ASC可以拥有一个或多个(不同的)AttributeSet,隐藏可以角色共享一个很大的Attribute Set,也可以每个角色按需添加Attribute Set。
可以在属性变化前(PreAttributeChange)后(PostGameplayEffectExecute)处理相关逻辑,可以通过委托的方式绑定属性变化。

创建它需要通过c++去创建
UE 5 GAS Gameplay Ability System_第6张图片

在项目中添加GAS

1. 安装插件

GAS是官方内置的插件,所以,我们可以在插件管理器里面直接搜到,安装完成以后,如何查看安装成功。在资源管理器右键查看是否有Gameplay技能蓝图。
UE 5 GAS Gameplay Ability System_第7张图片

2. 注册插件

UE 5 GAS Gameplay Ability System_第8张图片
打开build.cs
UE 5 GAS Gameplay Ability System_第9张图片
将三个插件注册

3. 创建带有GAS的Character

这个需要创建继承Character的子类,然后在子类上面添加GAS。
UE 5 GAS Gameplay Ability System_第10张图片
自己创建的类需要继承Acharacter,还需要继承IAbilitySystemInterface接口
UE 5 GAS Gameplay Ability System_第11张图片
增加相应的变量申明
在这里插入图片描述
获取GAS的方法
UE 5 GAS Gameplay Ability System_第12张图片
在类的构造函数里面实例化

UAbilitySystemComponent* ASACharacter::GetAbilitySystemComponent()const 
{
	return AbilitySystemComponent; 
}

获取GAS里面直接返回GAS实例即可。

UE 5 GAS Gameplay Ability System_第13张图片
角色初始是没有技能,需要我们在初始时,将GA赋予ASC,并初始化ASC
UE 5 GAS Gameplay Ability System_第14张图片
在角色的类的默认值这里,设置角色的初始技能。
UE 5 GAS Gameplay Ability System_第15张图片
如果在运行时附加技能,那么,在Character上面增加一个调用ASC增加技能的方法即可。

4. 创建AttributeSet

我们首先需要继承AttributeSet类
UE 5 GAS Gameplay Ability System_第16张图片
增加基类里面的定义方法的宏
UE 5 GAS Gameplay Ability System_第17张图片
构造函数,属性修改回调
UE 5 GAS Gameplay Ability System_第18张图片
构造函数设置默认值
UE 5 GAS Gameplay Ability System_第19张图片
属性网络同步用的,我做的是单机游戏,用不到,先留着
UE 5 GAS Gameplay Ability System_第20张图片
属性修改前回调,有属性修改就会触发,里面主要防止血量和体力值出现负值的情况
UE 5 GAS Gameplay Ability System_第21张图片
属性修改后回调,只在GE为Instant的时候触发
UE 5 GAS Gameplay Ability System_第22张图片
定义单个属性设置这些内容
UE 5 GAS Gameplay Ability System_第23张图片
别忘了在character里面构造函数里面初始化
UE 5 GAS Gameplay Ability System_第24张图片
设置完成这些,就可以直接在character里面直接获取相应的属性
UE 5 GAS Gameplay Ability System_第25张图片
在蓝图里面就可以直接获得角色相关属性值

5. 创建Gameplay Ability

UE 5 GAS Gameplay Ability System_第26张图片
创建一个Gameplay技能蓝图
UE 5 GAS Gameplay Ability System_第27张图片
调用的方法内置了三种,分别是通过实例,类,以及GA的Tag。注意,一定先将GA设置给GAS,调用才起作用。设置在创建GAS的有说。
UE 5 GAS Gameplay Ability System_第28张图片
技能里面内置两个事件,ActivateAbility是当前GA触发时的回调。事件OnEndAbility为当前GA结束时的回调。
UE 5 GAS Gameplay Ability System_第29张图片
在类的默认值这里,标签这里设置Tags,其它GA可以通过Tags来处理GA之间的逻辑关系。比如GAS可以通过TryActivateAbilitiesbyTag来调用GA。
UE 5 GAS Gameplay Ability System_第30张图片
在这里插入图片描述
此项为是否总是同步到服务器
UE 5 GAS Gameplay Ability System_第31张图片
网络相关的一些配置,我用不到,没有细研究。
Retrigger Instanced Ability 尝试重新触发技能,并停止之前触发的。
UE 5 GAS Gameplay Ability System_第32张图片
Costs为消耗,释放当前技能所需的成本
Cooldowns 冷却
这两个参数都需要设置一个GE的类,后面会讲GE
UE 5 GAS Gameplay Ability System_第33张图片
触发器可以在角色身上添加了某个Tag时,来触发此GA
Trigger Source :
Gameplay Event: 接收到带有Tag的Gameplay Event时触发GA,角色身上不会拥有此tag
Owner Tag Added :OwnerActor添加相应的tag时触发GA,每次添加触发一次GA
Owner Tag Present :OwnerActor拥有此tag的时候触发GA,失去时将取消GA

6. 设置Gameplay Ability蓝图

UE 5 GAS Gameplay Ability System_第34张图片
根据技能的运行流程,判断是否触发GA是ASC里面去做的逻辑处理
UE 5 GAS Gameplay Ability System_第35张图片
成功将触发事件ActivateAbility
UE 5 GAS Gameplay Ability System_第36张图片
判断消耗和冷却是在触发ActivateAbility之前就完成了,现在CommitAbility是提交消耗和冷却,如果提交时,技能消耗和冷却不符合要求,也会退出技能。

一般技能都是随带着动画播放实现的,技能里面需要播放的都是蒙太奇动画
UE 5 GAS Gameplay Ability System_第37张图片
正常的蒙太奇是这种
UE 5 GAS Gameplay Ability System_第38张图片
带有task的是这种,可以在GA结束时自动停掉蒙太奇
UE 5 GAS Gameplay Ability System_第39张图片
这个是定义的带有Gameplay Event的蒙太奇,可以在GASDocument项目案例中找到代码
UE 5 GAS Gameplay Ability System_第40张图片
结束时记得调用EndAbility来结束此技能
UE 5 GAS Gameplay Ability System_第41张图片

当然,中间还有技能释放时会播放GE,修改目标的值,获取目标的方法还是和之前一样了,你可以通过动画通知事件触发获取相应的事件获取
UE 5 GAS Gameplay Ability System_第42张图片
获取到目标的ASC,然后赋予目标ASC相应的GE造成相应的伤害等效果。

7. 制作Gameplay Effect

GE其实相当于一个数据蓝图,里面没有相关的逻辑处理,我们只能在配置那里进行相应的数值处理,GE也是修改Attribute的唯一渠道。
GE不但可以实现伤害效果,还可以实现技能冷却,技能消耗,以及初始化角色属性。
UE 5 GAS Gameplay Ability System_第43张图片
创建GE需要继承GameplayEffect
UE 5 GAS Gameplay Ability System_第44张图片
创建完成里面主要配置有上面的几大类,下面,将会对每一项的属性进行讲解。

在这里插入图片描述
首先是主要配置项,它属于GE的核心配置
UE 5 GAS Gameplay Ability System_第45张图片
Duration Policy 当前GE的持续效果

  • Instant 立即生效 一般做伤害计算的,直接应用到属性上面
  • Infinite 持续生效,时间是无限 常驻的被动技能,或者需要手动控制时长
  • HasDuration 有一个持续时间的效果

UE 5 GAS Gameplay Ability System_第46张图片
如果设置了一定的持续时间,那么需要设置持续的时长
UE 5 GAS Gameplay Ability System_第47张图片

Modifiers 修改attribute,因为是数组,可以修改多个
UE 5 GAS Gameplay Ability System_第48张图片

Executions 支持更复杂的方式修改attribute
UE 5 GAS Gameplay Ability System_第49张图片

Conditional Gameplay Effects 当前GE触发成功后,需要调用的其它GE
UE 5 GAS Gameplay Ability System_第50张图片
这些简短的介绍一下,因为后面我会出特定的使用情景下的设置方式

  • Period 设置此GE的触发周期,在非Instant的配置下,比如周期回血效果等
  • Application 设置此GE的触发概率和条件
  • Overflow 用于设置Stacking叠加超过设置层数后的效果
  • Expiration 当GE的Duration被打断或结束时的行为。通过GE应用GE的方法之一,仅能用于Has Duration的GE。
  • 显示 当前GE的显示效果,可以调用Gameplay Cue
  • 标签 和GA的tag标签一样
  • Immunity 通过设置tag来限制GE
  • Stacking 用于设置技能叠加的效果
  • Granted Abilities 可以用来添加GA

参考文章:

  1. https://zhuanlan.zhihu.com/p/486808688
  2. https://github.com/tranek/GASDocumentation#concepts-ge-cost
  3. https://blog.csdn.net/pirate310/article/details/106311256

你可能感兴趣的:(unreal,unreal,engine,5,游戏引擎,游戏,笔记)