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中。
在这里插入图片描述
它可以替代原本的Bool或Enum的结构,可以在玩法设计中更高效的标记对象的行为或状态。

Gameplay Ability

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

在这里插入图片描述
技能制作需要继承至插件内置的GameplayAbility类,里面事件触发回调以及事件结束回调。
触发相应的技能需要使用ASC的方法去调用
在这里插入图片描述
在触发技能之前,可以根据自己的需求设置是否触发当前的技能。
在这里插入图片描述

Gameplay Effect

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

Attribute Set

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

创建它需要通过c++去创建
在这里插入图片描述

在项目中添加GAS

1. 安装插件

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

2. 注册插件

在这里插入图片描述
打开build.cs
在这里插入图片描述
将三个插件注册

3. 创建带有GAS的Character

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

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

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

在这里插入图片描述
角色初始是没有技能,需要我们在初始时,将GA赋予ASC,并初始化ASC
在这里插入图片描述
在角色的类的默认值这里,设置角色的初始技能。
在这里插入图片描述
如果在运行时附加技能,那么,在Character上面增加一个调用ASC增加技能的方法即可。

4. 创建AttributeSet

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

5. 创建Gameplay Ability

在这里插入图片描述
创建一个Gameplay技能蓝图
在这里插入图片描述
调用的方法内置了三种,分别是通过实例,类,以及GA的Tag。注意,一定先将GA设置给GAS,调用才起作用。设置在创建GAS的有说。
在这里插入图片描述
技能里面内置两个事件,ActivateAbility是当前GA触发时的回调。事件OnEndAbility为当前GA结束时的回调。
在这里插入图片描述
在类的默认值这里,标签这里设置Tags,其它GA可以通过Tags来处理GA之间的逻辑关系。比如GAS可以通过TryActivateAbilitiesbyTag来调用GA。
在这里插入图片描述
在这里插入图片描述
此项为是否总是同步到服务器
在这里插入图片描述
网络相关的一些配置,我用不到,没有细研究。
Retrigger Instanced Ability 尝试重新触发技能,并停止之前触发的。
在这里插入图片描述
Costs为消耗,释放当前技能所需的成本
Cooldowns 冷却
这两个参数都需要设置一个GE的类,后面会讲GE
在这里插入图片描述
触发器可以在角色身上添加了某个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蓝图

在这里插入图片描述
根据技能的运行流程,判断是否触发GA是ASC里面去做的逻辑处理
在这里插入图片描述
成功将触发事件ActivateAbility
在这里插入图片描述
判断消耗和冷却是在触发ActivateAbility之前就完成了,现在CommitAbility是提交消耗和冷却,如果提交时,技能消耗和冷却不符合要求,也会退出技能。

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

当然,中间还有技能释放时会播放GE,修改目标的值,获取目标的方法还是和之前一样了,你可以通过动画通知事件触发获取相应的事件获取
在这里插入图片描述
获取到目标的ASC,然后赋予目标ASC相应的GE造成相应的伤害等效果。

7. 制作Gameplay Effect

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

在这里插入图片描述
首先是主要配置项,它属于GE的核心配置
在这里插入图片描述
Duration Policy 当前GE的持续效果

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

在这里插入图片描述
如果设置了一定的持续时间,那么需要设置持续的时长
在这里插入图片描述

Modifiers 修改attribute,因为是数组,可以修改多个
在这里插入图片描述

Executions 支持更复杂的方式修改attribute
在这里插入图片描述

Conditional Gameplay Effects 当前GE触发成功后,需要调用的其它GE
在这里插入图片描述
这些简短的介绍一下,因为后面我会出特定的使用情景下的设置方式

  • 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

猜你喜欢

转载自blog.csdn.net/qq_30100043/article/details/132148338
今日推荐