[游戏开发][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.rhkb.cn/news/281549.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.03.21作业

自由发挥实现一个登录窗口的应用场景 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QPen> #include <QBrush> #include <QPainter> #include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; class Painter; } QT_END_NAMESPACE…

把txt、pdf等文件转为一行一行的doccano数据集输入格式

文章目录 doccano 数据集导入简介代码实现代码运行结果代码公开 doccano 数据集导入 在Doccano 导入数据集时&#xff0c;使用TextLine的文件格式&#xff0c;导入的文件需要为一行一行文本的数据格式&#xff0c;每一行文本在导入Doccano后就是一条数据。 简介 主要工作说明…

外包干了3天,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

cocos 3.8开发 微信小游戏分包技巧压缩主包

Creator 版本&#xff1a; 3.8.2 目标平台&#xff1a;小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整&#xff01; 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

归并算法详细解析

归并排序 1945年&#xff0c;约翰冯诺依曼&#xff08;John von Neumann&#xff09;发明了归并排序&#xff0c;这是典型的分治算法的应用。归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Di…

数据结构:堆

堆的概念 1.堆是一个完全二叉树 2.小堆(任何一个父亲<孩子),大堆(任何一个父亲>孩子) 堆的结构 物理结构:数组 逻辑结构:二叉树 #pragma once #include<assert.h> #include<iostream> typedef int HPDataType; typedef struct Heap {HPDataType* _a;int…

数据挖掘之关联规则

“啤酒和尿布的荣誉” 概念 项 item&#xff1a;单个的事物个体 &#xff0c;I{i1,i2…im}是所有项的集合&#xff0c;|I|m是项的总数项集&#xff08;item set)/模式&#xff08;pattern)&#xff1a;项的集合&#xff0c;包含k个项的项集称为k-项集数据集(data set)/数据库…

Redis设计原理简介

键值存储模型&#xff1a; Redis是一个基于内存的键值对存储系统&#xff0c;它支持五种基本数据结构&#xff08;字符串String、哈希Hash、列表List、集合Set、有序集合Sorted Set&#xff09;以及几种高级数据结构如Bitmaps、HyperLogLogs等。 单线程架构&#xff1a; Redis采…

php 对接IronSource海外广告平台收益接口Reporting API

今天对接的是IronSource广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到IronSource后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://developers.is.com/ironsource-mobile/air/reporting/ 在这里插…

管理类联考–复试–英文面试–问题–WhatWhyHow--纯英文汇总版

文章目录 Do you have any hobbies? What are you interested in? What do you usually do in your spare time? Could you tell me something about your family&#xff1f; Could you briefly introduce your family? What is your hometown like? Please tell me so…

ab (Apache benchmark) - 压力/性能测试工具

Apache benchmark&#xff08;ab&#xff09; 安装window安装使用方法 - bin目录运行使用方法 - 任意目录运行 linux安装 基本命令介绍常用参数:输出结果分析&#xff1a; ab的man手册 安装 window安装 官网下载链接&#xff1a;https://www.apachehaus.com/cgi-bin/download…

【LinuxC】C语言线程(pthread)

文章目录 一、 POSIX 线程库1.1 POSIX标准1.2 Pthreads1.2 数据类型、函数、宏1.21 数据类型1.22 函数1.23 宏 二、创建线程三、线程同步四、线程销毁五、示例5.1 完整示例5.2 信号量示例 本专栏上一篇文章是Windows下&#xff08;MSVC&#xff09;的线程编程&#xff0c;需要的…

[实践经验]: visual studio code 实用技巧

目录 editor rulers 这里主要总结一些常用的VScode技巧&#xff0c;不定时更新… editor rulers 设置 -> 搜索 editor.rulers -> edit in settings.json "editor.rulers": [{"column": 80,"color": "#ff00FF"},]效果如图

Linux:设置别名命令alias

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Linux中alias命令用于为一串字符&#xff08;常代表命令&#xff09;设置一个别名&#xff0c;该别名在Bash读取并解析一行命令时会被展开。 下面是该命令的语法与选项…

python(django)之产品后台管理功能实现

1、添加新项目 在命令行输入以下代码 python manage.py startapp prroduct 2、添加路径和代码结构 在新项目目录下admin.py中加入以代码 from .models import Product class ProductAdmin(admin.ModelAdmin):list_display [product_name, product_desc,producter,created_…

牛客小白月赛86(D剪纸游戏)

题目链接:D-剪纸游戏_牛客小白月赛86 (nowcoder.com) 题目描述: 输入描述: 输入第一行包含两个空格分隔的整数分别代表 n 和 m。 接下来输入 n行&#xff0c;每行包含 m 个字符&#xff0c;代表残缺纸张。 保证&#xff1a; 1≤n,m≤10001 字符仅有 . 和 * 两种字符&#xf…

利用autodl服务器跑模型

1. 租用服务器 本地改模型 服务器 将改进好的、数据集处理好的模型压缩为zip文件上传到阿里云盘打开服务器AUTODL服务器&#xff0c;在主页中选择容器实例 在此位置进行开关机操作&#xff0c;若停止服务器&#xff0c;必须关机&#xff0c;不然会一直扣钱 2. 运行模型 选择…

Nacos详解,从安装到服务部署,及nginx反向代理

Nacos 安装 Windows安装 下载 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https://github.com/alibaba/nacos…

peft模型微调_IA3

IA3&#xff08;论文&#xff1a;Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning&#xff09;&#xff0c;通过学习向量来对激活层加权进行缩放&#xff0c;从而获得更强的性能&#xff0c;同时仅引入相对少量的新参数&#xff0c;…