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

news2024/11/24 20:52:57

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.coloradmin.cn/o/1522412.html

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

相关文章

【刷题训练】牛客:JZ31 栈的压入、弹出序列

文章目录 一、题目要求二、解题思路三、C代码四、注意点五、运行成功 一、题目要求 二、解题思路 题意解读。本道题给定了两个序列pushV和popV,其中序列pushV是入栈顺序,popV是出栈顺序。问题就是让我们去判断这个popV的顺序是否可能是pushV的弹出顺序。…

瑞_Redis_短信登录(二)

文章目录 项目介绍1.1 项目准备1.2 基于Session实现登录流程1.2.1 发送短信验证码1.2.2 短信验证码登录、注册1.2.3 校验登录状态 1.3 实现发送短信验证码功能1.3.1 页面流程1.3.2 代码实现 1.41.51.6 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的…

【LeetCode热题100】148. 排序链表(链表)

一.题目要求 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 二.题目难度 中等 三.输入样例 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输…

知名Web3投资基金a16z合伙人Jane Lippencott确认出席Hack.Summit() 2024区块链开发者大会

在区块链技术的风起云涌和Web3生态的蓬勃发展中,知名a16z Crypto的合伙人Jane Lippencott已确认出席即将于2024年4月9日至10日在香港数码港举行的Hack.Summit() 2024区块链开发者大会。作为亚洲首次举办的Hack.Summit(),此次大会将为全球区块链开发者及业…

DFS的一些题目

题目1:奶牛选美 这道题其实就是把两个连通块合成一个,可以用dfs、bfs和并查集。因为最近在dfs专题训练,这里我只写了dfs。 首先我们用dfs的方式遍历两个连通块,将两个连通块中点的坐标分别存入两个数组中,将这两个数组…

openssl3.2 - note - Writing OpenSSL Provider Skeleton

文章目录 openssl3.2 - note - Writing OpenSSL Provider Skeleton概述笔记测试工程的建立复现的provider工程总结Provider包含的头文件openssl/core.h中的数据结构实现 OSSL_provider_init()看一下openssl自带的提供者provider的openssl命令行测试provider的本质是hook了opens…

pytorch 入门基础知识一(Pytorch 01)

一 深度学习基础相关 深度学习三个主要的方向:计算机视觉,自然语言,语音识别。 机器学习核心组件:1 数据集(data),2 前向传播的model(net),3 目标函数(loss), 4 调整模型参数和优化函数的算法…

【研发管理】产品经理-基础认知

导读:产品经理(Product Manager)是一个负责产品的全周期管理的职位,他们不仅参与产品的设计、开发、推广和销售,还涉及到产品的市场调研、用户需求分析、竞争分析、产品规划、产品测试以及后续的产品迭代等多个环节。产…

安装snap再安装flutter再安装localsend@Ubuntu(FreeBSD下未成功)

Localsend介绍 localsend是一个跨平台的文件传送软件,可以在Windows、MacOS、Linux、Android和IOS下互相传送文件,只要在同一个局域网即可。 localsend官网:LocalSend 尝试安装localsend,发现需要使用flutter, 安装f…

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz,可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端,输入以下命令更新软件包列表:sudo apt update。之后,使用命令sudo apt install graphviz来安装Graphviz软件包。为…

挑战杯 机器视觉人体跌倒检测系统 - opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉人体跌倒检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数&…

前端之CSS 创建css--行内引入、内联样式、外联样式

创建css有三种创建样式&#xff0c;行内引入、内联引入、外联引入。 行内引入 在行内标签引入 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>行内样式</title> </head> <body>…

【安全类书籍-3】XSS跨站脚剖析与防御

目录 内容简介 作用 下载地址 内容简介 这本书涵盖以下几点: XSS攻击原理:解释XSS是如何利用Web应用未能有效过滤用户输入的缺陷,将恶意脚本注入到网页中,当其他用户访问时被执行,实现攻击者的目的,例如窃取用户会话凭证、实施钓鱼攻击等。 XSS分类:分为存储型XSS(…

单片机FLASH深度解析和编程实践(下)

本篇文章将同大家分享单片机FLASH编程的相关寄存器和寄存器操作及库函数操作。本篇文章依然以STM32单片机为例进行解析。有关FLASH的基本原理和实现方法&#xff0c;大家可以参考上一篇文章&#xff1a;单片机FLASH深度解析和编程实践&#xff08;上&#xff09;-CSDN博客 目录…

ChatGPT编程—实现小工具软件(文件查找和筛选)

ChatGPT编程—实现小工具软件(文件查找和筛选) 今天借助[小蜜蜂AI][https://zglg.work]网站的ChatGPT编程实现一个功能&#xff1a;根据特定需求结合通配符和其他条件来进行文件查找和筛选。在这个例子中&#xff0c;我们将创建一个函数find_files&#xff0c;它接受用户输入的…

solr/ES 分词插件Jcseg设置自定义词库

步骤&#xff1a; 1、找到配置文件jcseg-core/target/classes/jcseg.properties修改配置&#xff1a; 下载地址: https://gitee.com/lionsoul/jcseg#5-如何自定义使用词库 lexicon.path {jar.dir}/../custom-word 设置lexicon路径&#xff0c;我们这个配置可以自定义&#xf…

Java 与 Go:可变数组

可变数组&#xff08;也称为动态数组&#xff09;是一种可以在运行时动态增加或减少其大小的数据结构。由于其动态分配大小&#xff0c;灵活性增删改查&#xff0c;动态地管理内存&#xff08;在需要时动态分配内存空间&#xff0c;以适应数据结构的大小变化&#xff0c;而不会…

NCV1117ST50T3G线性稳压器芯片中文资料规格书PDF数据手册引脚图图片价格参数

产品概述&#xff1a; NCP1117系列为低压差&#xff08;LDO&#xff09;正向线性电压稳压器&#xff0c;能够提供超过1.0A的输出电流&#xff0c;800mA时温度范围内最大压差为1.2V。这一系列包括八个固定输出电压&#xff1a;1.5V、1.8V、2.0V、2.5V、2.85V、3.3V、5.0V 和 12…

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十&#xff09; 下一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09;&#xff08;未发表&#xff09; 33.sq…

【RS422】基于未来科技FT4232HL芯片的多波特率串口通信收发实现

功能简介 串行通信接口常常用于在计算机和低速外部设备之间传输数据。串口通信存在多种标准&#xff0c;以RS422为例&#xff0c;它将数据分成多个位&#xff0c;采用异步通信方式进行传输。   本文基于Xilinx VCU128 FPGA开发板&#xff0c;对RS422串口通信进行学习。   根…