UE 5 GAS Gameplay Ability System

2024-02-03 15:10
文章标签 ue system ability gas gameplay

本文主要是介绍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

这篇关于UE 5 GAS Gameplay Ability System的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/674543

相关文章

Partical System

创建"粒子系统物体"(点击菜单GameObject -> Create Other -> Particle System) 添加"粒子系统组件"(点击Component -> Effects  ->Particle System) 粒子系统检视面板  点击粒子系统检视面板的右上角的"+"来增加新的模块。(Show All Modules:显示全部) 初始化模块: •

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

System.getProperties().

Java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

android6/7 system打包脚本

1.android5打包system就是网站上常见的制作ROM必备的解包打包system脚本 指令如下:mkuserimg.sh -s out/target/product/$TARGET_PRODUCT/system out/target/product/$TARGET_PRODUCT/obj/PACKAGING/systemimage_intermediates/system.img

android打包解包boot.img,system.img

原帖地址:http://www.52pojie.cn/thread-488025-1-1.html 转载Mark一下,日后研究 最近工作需要对boot.img,system.img进行破解。顺便将心得分享一下。 我的工作环境是在linux下的。所以工具都是针对linux的。 boot.img破解相关工具: 1、split_boot    perl脚本 2、boot_i

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二

Linux函数fcntl/system学习

本文针对项目中用到的几个函数进行详细分析,并尽可能的添加示例进行验证学习。比如fcntl/ioctl函数、system/exec函数、popen/pclose函数、mmap函数等。 重点参考了《UNP》和《Linux程序设计》第四版。 一、fcntl函数 fcntl函数可以改变或者查看已打开文件的性质。该函数的定义如下: #include <fcntl.h> int fcntl(

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i

解决PHP Warning: strftime(): It is not safe to rely on the system's timezone set

当运行一些程序时,在httpd日志中会有如下警告日志: PHP Warning:  strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set(