UE 5 GAS Gameplay Ability System

news2024/9/23 7:22:34

游戏技能系统 简称(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
在这里插入图片描述
按照流程我们可以去判断消耗和冷却,这也是设置在GA默认值上面的,冷却和消耗的GE后面会说。

一般技能都是随带着动画播放实现的,技能里面需要播放的都是蒙太奇动画
在这里插入图片描述
正常的蒙太奇是这种
在这里插入图片描述
带有task的是这种,可以在GA结束时自动停掉蒙太奇
在这里插入图片描述
在UE4中还有Event事件的版本,在UE5里面就没有,还待检查什么问题。
在这里插入图片描述
结束时记得调用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openGauss学习笔记-31 openGauss 高级数据管理-索引

文章目录 openGauss学习笔记-31 openGauss 高级数据管理-索引31.1 语法格式31.2 参数说明31.3 示例 openGauss学习笔记-31 openGauss 高级数据管理-索引 索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 索引可以用来提高数据库查询性能&…

我在VScode学Java多态(Java多态、instanceof)

Java的多态(Polymorphism)是面向对象编程中的一种特性,它允许不同的对象能够以统一的方式进行访问和操作。它允许一个类的实例在运行时表现出多种形态。 Java多态的实现主要依赖于两个基本概念:继承和方法重写。在Java中&#xff…

程序员的趣闻:神奇Bug与不可思议的技术世界

文章目录 Bug本身情况发现Bug的过程怎么对待这个Bug其他感受 程序员的世界充满了各种离奇而又难以置信的趣闻,其中不乏那些令人目瞪口呆的神奇Bug。有时候,这些故事不仅令人捧腹大笑,还展现了技术世界的多姿多彩。让我们走进这个充满惊奇的领…

Java集合容器详解:ArrayList、LinkedList和HashMap、HashTable及其区别

文章目录 一、简介二、ArrayList详解2.1 动态数组2.2 扩容机制2.3 特点2.4 操作 三、LinkedList详解3.1 双向链表结构3.2 双向链表结构3.3 操作 四、HashMap详解4.1 概述4.2 内部实现4.2.1 哈希表结构4.2.2 散列冲突解决4.2.3 扩容机制 4.3 版本差异4.4 实操 五、HashTable5.1 …

安卓:LitePal操作数据库

目录 一、LitePal介绍 常用方法: 1、插入数据: 2、更新数据: 3、删除数据: 4、查询数据: 二、LitePal的基本用法: 1、集成LitePal: 2、创建LitePal配置文件: 3、创建模型类…

Vue+Vue Router+TailwindCss+Daisyui部署

一、构建Vue项目 > npm init vuelatest > cd <your-project-name> > npm install > npm run dev 二、设置IDEA JS版本 三、安装Tailwindcss Install Tailwind CSS with Vite - Tailwind CSS npm install -D tailwindcss postcss autoprefixer npx tai…

Linux下匿名管道简单模拟进程间通信

Linux下匿名管道简单模拟进程间通信 文章目录 Linux下匿名管道简单模拟进程间通信在这里插入图片描述1.引言2.具体实现2.1创建管道2.2创建子进程 && 通信(子进程写入)2.3关闭对应fd 3.结果 1.引言 ​ ​ 首先&#xff0c;管道是一种半双工的单向进程间通信方式&#…

有哪些简单的AI绘画软件?

随着人工智能技术的不断发展&#xff0c;越来越多的人工智能绘画软件出现了。人工智能绘画软件利用人工智能技术&#xff0c;通过计算机自动生成或辅助生成艺术作品。人工智能绘画软件通常集成了深度学习、计算机视觉和自然语言处理技术&#xff0c;可以模拟人类的创作过程&…

【数据结构与算法】十大经典排序算法-插入排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

【Shell】基础语法(三)

文章目录 一、Shell基础语法1. 位置参数和特殊变量2. 输入输出3. 管道4. 文件重定向5. 函数6. 脚本调试方法 二、Shell高级和正则表达式1. sort命令2. uniq命令3. wc命令4. grep命令5. find命令6. xargs7. sed命令8. crontab 一、Shell基础语法 1. 位置参数和特殊变量 $0 …

循环队列详解

1. 循环队列 1.1 概念及结构 循环队列是一种特殊类型的队列数据结构&#xff0c;也被称为”唤醒缓冲器“。它在数组的基础上实现了循环利用空间的功能。在循环队列中&#xff0c;队尾和队头之间形成了一个循环&#xff0c;当队尾指针“追上”队头指针时&#xff0c;队列不再继…

IDEA设置Tabs多行显示的方法

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在开发的时候、不知不觉我们就会打开很多代码页。如果打开的页面…

在线原型设计工具有好用的吗?就是这10个

随着设计工作的不断发展&#xff0c;原型设计在设计工作中越来越重要&#xff0c;而在线原型设计工具在减轻了设计师工作负担的同时也提高了设计师的工作效率&#xff0c;今天本文将为大家推荐10个能在线使用的原型设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 …

CDC 数据复制:技术、权衡、见解

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景 在本文中&#xff0c;我将定义 CDC 数据复制&#xff0c;简要讨论最常见的用例&#xff0c;然后讨论常见技术及其权衡。最后&#xff0c;我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到…

使用logback异步打印日志

文章目录 一、介绍二、运行环境三、演示项目1. 接口2. 日志配置文件3. 效果演示4. 异步输出验证 四、异步输出原理五、其他参数配置六、源码分析1. 同步输出2. 异步输出 七、总结 一、介绍 对于每一个开发人员来说&#xff0c;在业务代码中添加日志是至关重要的&#xff0c;尤…

CSS:弹性盒子模型详解(用法 + 例子 + 效果)

目录 弹性盒子模型flex-direction 排列方式 主轴方向换行排序控制子元素缩放比例缩放是如何实现的&#xff1f; 控制子元素的对其方式justify-content 横向 对齐方式align-items 纵向 对齐方式 align-content 多行 对齐方式 弹性盒子模型 flex-direction 排列方式 主轴方向 f…

webshell免杀项目-Auto-JSPwebshell(五)

Auto-JSPwebshell/jsp免杀/webshell免杀/自动生成 项目地址&#xff1a; https://github.com/G0mini/Bypass 具体使用请参考&#xff1a; https://mp.weixin.qq.com/s/9-__B0MBRSXHla6O0KU7Gg

PCB制造中铜厚度的重要性

电子产品中的PCB是现代电子设备中不可或缺的一部分。在PCB制造过程中&#xff0c;铜厚度是一个非常重要的因素。正确的铜厚度可以保证电路板的质量和性能&#xff0c;同时也影响着电子产品的可靠性和稳定性。 一般我们常见的铜厚有17.5um&#xff08;0.5oz&#xff09;&#x…

SpringBootWeb案例-准备工作

目录 前言 准备工作 需求&环境搭建 需求 环境搭建 开发规范 Restful开发规范 统一的响应结果 开发流程 前言 根据过往的文章可以知道目前我已经学习完了前端、后端、数据库的基础知识&#xff0c;接下来通过一个基于SpringBoot工程开发的web项目案例。 准备工作 …