[游戏开发][UE5.3]GAS学习心得

GAS(GameplayAbilitySystem)

UE提供的一套技能框架,这个框架也不是万能的,甚至各个部件你要进行封装开发,但这也比你从头写一套技能框架要容易很多。

GAS功能极其强大,所以它是一个庞大的系统,如果想运用得当,最好是熟知每一个类的每一个变量如何使用,当然你也可以有选择的熟知大部分细节,也不耽误制作。

ASC(AbilitySystemComponent)

它是GA的底层,通过它Component的名字可以看出,它类似一个组件,加到谁身上,谁就拥有了ASC功能。

GameplayTag

这是UE引擎本身就提供的功能,GAS只是沿用了这个功能。

GA(Gameplay Ability)

表现:GA是在UE里一个继承自GameplayAbility的蓝图类,在实际项目中

GE(Gameplay Effect)

GE相关的名词

GameplayEffect

GameplayEffectExecutionCalculation

GE是什么

表现:GE是在UE里一个继承自GameplayEffect的蓝图类,我创建了一个名为GE_My的蓝图

效果:GE可以理解为Buff与影响的集合,或者说是高级版的Buff


GE生效入口

GameplayAbility

ApplyGameplayEffectSpecToTarget

ApplyGameplayEffectToTarget

ApplyGameplayEffectToOwner


AbilitySystemComponent

ExecuteGameplayEffect

ApplyGameplayEffectSpecToSelf

ApplyGameplayEffectSpecToTarget

ApplyGameplayEffectToSelf

ApplyGameplayEffectToTarget


CMGameplayAbility

MakeEffectContainerSpecFromContainer

MakeEffectContainerSpec

ApplyEffectContainer

ApplyEffectContainerSpec

MakeEffectContextCustom

GetActiveGameplayEffectContext

GE生效流程

GE生效只讲数值类GE,

前面讲了GE的文件创建和生效入口,那接下来就要让GE生效了。

方式1:在GA蓝图里调用ApplyGameplayEffectToOwner即可让GE生效。这种方法缺点比较大,一般在demo里面调试用,就是必须在蓝图里选中要生效哪个GE,在正式的项目中我们有无数个GE,手动选择GE肯定是不行的。

方式2:

GE计算

下面举例一个伤害GE,添加了Modifer的GE生效时,GE_给目标的生命值-15点

正常的项目里肯定不能这么整啊,因为每个人的攻击力都不一样,你咋知道扣多少点呢?

因此,Modifer的方式肯定要抛弃,我们用GE的Execution

GE的Execution就是把属性计算放到C++类里去执行,这个CalculationClass变量就是你自定义的C++类,前提是你的C++类必须继承GameplayEffectExecutionCalculation,才能在蓝图中选中。例如我项目里的UCMDamageCalculation,Calculation类如何知道是谁砍了谁,这里就看一下晕基类方法 Execute

void Execute(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const;

一切奥秘在变量FGameplayEffectCustomExecutionParameters内。它提供了上下文关系。

通过FGameplayEffectCustomExecutionParameters拿到攻击方和防守方的ASC,同时就能拿到ASC归属于哪个Character,从而能拿到Character上的所有属性值。

拿到双方属性值,那岂不是可以为所欲为了,想改啥就改啥。

FGameplayEffectCustomExecutionParameters这个属性是从哪传来的

看一下官方文档

4.5.12.1.4 GameplayEffectContext

GC(GameplayCue)

表现层相关

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习pytorch——基本运算(持续更新)

基本运算——加、减、乘、除 建议直接使用运算符,函数和运算符的效果相同 代码演示: #%% # 加减乘除 a torch.rand(3,4) b torch.rand(4) # 这里a、b可以相加,别忘了pytorch的broadcast机制 print(ab) print(torch.add(a,b)) print(torc…

MySQL中的索引失效情况介绍

MySQL中的索引是提高查询性能的重要工具。然而,在某些情况下,索引可能无法发挥作用,甚至导致查询性能下降。在本教程中,我们将探讨MySQL中常见的索引失效情况,以及它们的特点和简单的例子。 1. **索引失效的情况** …

代码算法训练营day9 | 28. 实现 strStr() 、459.重复的子字符串

day9: 28. 实现 strStr()KMP的主要应用:什么是前缀表:前缀表是如何记录的: 如何计算前缀表:构造next数组:1、初始化2、处理前后缀不相同的情况3、处理前后缀相同的情况 代码: 459.重复的子字符串…

Python入门(三)

序列 序列是有顺序的数据集合。序列包含的一个数据被称为元素,序列可以由一个或多个元素组成,也是可以没有任何元素的空序列。 序列的类型 元组(定值表):一旦建立,各个元素不可再更变,所以一…

Linux文件操作

pwd命令 cd命令 ls命令 mkdir命令 同时创建父子目录 cp命令 mv命令(相当于用cp复制之后,把源文件删除) 用mv命令来冲命令 rm命令 可以看到,我们用当前目录的文件覆盖了目标路径上的文件,并且目标路径中多了一个以波浪…

5 张图带你了解分布式事务 Saga 模式中的状态机

大家好,我是君哥。 状态机在我们的工作中应用非常广泛,今天聊一聊分布式事务中间件 Seata 中 Saga 模式的状态机。 1 状态机简介 状态机是一个数学模型,它将工作中的运行状态和流转规则抽象出来,可以协调相关信号来完成预先设定…

构造-析构-拷贝构造-赋值运算符重载-const成员函数

1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么时候都不写时,编译器会自动生成以下6个成员函数。 默认成员函数:用户没有显式实现,编译器…

C++之deque与vector、list对比分析

一.deque讲解 对于vector和list,前一个是顺序表,后一个是带头双向循环链表,前面我们已经实现过,这里就不再讲解了,直接上deque了。 deque:双端队列 常见接口大家可以查看下面链接: deque - …

STM32第九节(中级篇):RCC(第一节)——时钟树讲解

目录 前言 STM32第九节(中级篇):RCC——时钟树讲解 时钟树主系统时钟讲解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 SW位控制 HCLK时钟 PCLKI时钟 PCLK2时钟 RTC时钟 MCO时钟输出 6.2.7时钟安全系统(CSS) 小结 前言 从…

单链表操作

单链表操作 1. 链表的概念2. 链表的分类2.1.单向或者双向2.2 带头或者不带头2.3 循环或者非循环2.4 常用的链表 3. 单链表的实现3.1 单链表的打印3.2 单链表的头插3.3 单链表的尾插3.4 单链表的头删3.5 单链表的尾删3.6 单链表的查询3.7 在pos前插入数据3.8 在pos后插入数据3.9…

Linux——进程通信(一) 匿名管道

目录 前言 一、进程间通信 二、匿名管道的概念 三、匿名管道的代码实现 四、管道的四种情况 1.管道无数据,读端需等待 2.管道被写满,写端需等待 3.写端关闭,读端一直读取 4.读端关闭,写端一直写入 五、管道的特性 前言 …

不锈钢多功能电工剥线钳分线绕线剪线剥线钳剥线压线扒皮钳子

品牌:银隆 型号:089B绿色 材质:镍铬钢(不锈钢) 颜色分类:089B灰色,089B红色,089B绿色,089B黑色,089B橙色 功能齐集一身,一钳多用,多功能剥线钳。剥线,剪线&#xff…

Java-CAS 原理与 JUC 原子类

由于 JVM 的 synchronized 重量级锁涉及到操作系统(如 Linux) 内核态下的互斥锁(Mutex)的使用, 其线程阻塞和唤醒都涉及到进程在用户态和到内核态频繁切换, 导致重量级锁开销大、性能低。 而 JVM 的 synchr…

免费阅读篇 | 芒果YOLOv8改进114:上采样Dysample:顶会ICCV2023,轻量级图像增采样器,通过学习采样来学习上采样,计算资源需求小

💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接: 芒果YOLOv8深度改进教程 🚀🚀🚀 DySample是一个超轻量级和有效的动态上采样器…

DDos攻击如何被高防服务器有效防范?

德迅云安全-领先云安全服务与解决方案提供商 什么是DDos攻击? DDos攻击是一种网络攻击手段,旨在通过使目标系统的服务不可用或中断,导致无法正常使用网络服务。DDos攻击可以采取多种方式实施,包括洪水攻击、压力测试、UDP Flood…

HTML静态网页成品作业(HTML+CSS)——游戏战地介绍设计制作(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

关于PXIE3U18槽背板原理拓扑关系

如今IT行业日新月异,飞速发展,随之带来的是数据吞吐量的急剧升高。大数据,大存储将成为未来数据通信的主流,建立快速、大容量的数据传输通道将成为电子系统的关键。随着集成技术和互连技术的发展,新的串口技术&#xf…

【QT+QGIS跨平台编译】之七十七:【QGIS_Gui跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 src\gui\qgsadvanceddigitizingdockwidge…

ClickHouse中的设置的分类

ClickHouse中的各种设置 ClickHouse中的设置有几百个,下面对这些设置做了一个简单的分类。

【Godot 4.2】常见几何图形、网格、刻度线点求取函数及原理总结

概述 本篇为ShapePoints静态函数库的补充和辅助文档。ShapePoints函数库是一个用于生成常见几何图形顶点数据(PackedVector2Array)的静态函数库。生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。因为不断地持续扩展,ShapePoint…