10. UE5 RPG使用GameEffect创建血瓶修改角色属性

news2024/11/16 15:25:36

前面我们通过代码实现了UI显示角色的血量和蓝量,并实现了初始化和在数值变动时实时更新。为了测试方便,没有使用GameEffect去修改角色的属性,而是通过代码直接修改的数值。
对于GameEffect的基础,这里不再讲解,如果需要可以查看文档。
虚幻引擎游戏技能系统文档
接下来,讲解一下,如何使用GameEffect进行属性修改。

实现拾取物的Effect

之前,我们创建了一个Actor的类,用于修改,现在将其内容还原成一个刚创建的模样。
为了保证类的通用性,我们删除了所有的内容,只添加了一个根节点。如果你需要一些内容,可以在蓝图内添加。

SetRootComponent(CreateDefaultSubobject<USceneComponent>("SceneRoot"));

打开UE,在根节点下面添加一个静态网格体,用于添加显示模型。
在这里插入图片描述
接着将静态网格体的碰撞关闭掉,因为我们不需要它进行碰撞检测
在这里插入图片描述

在根组件下面再添加一个球碰撞体,用于碰撞检测
在这里插入图片描述
球碰撞体是默认对所有物体进行检测的
在这里插入图片描述
添加球体的碰撞检测事件通知
在这里插入图片描述
添加到这里,就可以先将UE关闭,我们可以将一些使用蓝图方便编辑的内容在蓝图中制作,一些比较耗性能的内容或运算比较高的内容放到c++内做。

实现赋予类给自身添加GameplayEffect

上面通过蓝图添加了碰撞检测,我们将在碰撞检测之后链接在c++里创建的函数,为角色身份赋予effect效果。
打开代码编辑器,在拾取物基类里添加一个函数,通过类赋予目标Effect的函数,设置这个函数可以在蓝图可调用。

	UFUNCTION(BlueprintCallable) 
	void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass);//给与目标添加GameplayEffect

函数实现里,首先要获取到添加目标的ASC组件,这里我们使用到了技能组件库里面的函数获取,

UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor);

使用ASC创建一个EffectContextHandle,这个句柄里面包含实例化GameplayEffect所需的数据

FGameplayEffectContextHandle EffectContextHandle = TargetASC->MakeEffectContext();

设置此句柄的创建者

EffectContextHandle.AddSourceObject(this);

通过MakeOutgoingSpec()函数实例化GameplayEffect,返回一个实例化的句柄(句柄的意思是可以跟踪实例化对象的位置,即使它位置变动了也能跟踪的到)
MakeOutgoingSpec()函数需要传入三个值,第一个就是需要实例化的类,第二个是效果等级(它是有等级区分的),第三个值就是我们之前创建的实例化所需数据的句柄。

const FGameplayEffectSpecHandle EffectSpecHandle = TargetASC->MakeOutgoingSpec(GameplayEffectClass, 1.f, EffectContextHandle);

最后,我们需要从实例化对象中拿到它的实际位置,并调用ASC赋予自身。

TargetASC->ApplyGameplayEffectSpecToSelf(*EffectSpecHandle.Data.Get());

打开拾取物蓝图,搜索对应的名称,如果出现当前函数节点,证明我们成功了
在这里插入图片描述

创建GameplayEffect

接下来我们创建GameplayEffect,这个不需要在c++里编写,直接创建蓝图编辑即可。接下来,我们将创建一个药瓶的效果,能够瞬间恢复一定血量的效果。
创建一个基于GameplayEffect的蓝图类
在这里插入图片描述
在右侧的细节设置相关的配置项,其实这个蓝图就是一个数据蓝图,新版本5.3的配置还改版了,之前是一堆直接罗列出来,现在新增加了一个Components配置,可以自己按照需求添加,这个感觉改版改的挺好。
在这里插入图片描述
在持续时间这里,有三个选项Instant瞬间(也可以理解为永久),Infinite(无限时间,可以后续被去掉,比如永久buff),Has Duration(具有时效性),血瓶作为直接恢复血量的,不会再被去掉恢复的血量,可以使用Instant
在这里插入图片描述
在下面的Modifiers这里,添加一个数组元素
在这里插入图片描述
它的Attribute设置需要选择我们需要修改的选项,血瓶需要修改血量,选择在属性集里创建的Health属性
在这里插入图片描述
计算方式有加,乘,除,覆盖数值,无效,有小伙伴会问,为什么没有减,加的数值是负数就是减了。
在这里插入图片描述
这里血量恢复就是加,所以我们使用add,一瓶血恢复十点生命值
在这里插入图片描述
到这里,我们的血量恢复的Effect就编写完成了。

添加蓝图逻辑

首先在c++类里添加一个参数,用于设置类,这个类可以被蓝图设置,并被蓝图读取。

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Apply Effects")
	TSubclassOf<UGameplayEffect> InstantGameplayEffectClass; //生成GameplayEffect的类

打开对应蓝图后,在类默认值的细节这里,我们可以设置对应的Effect类,直接选择我们创建的Effect
在这里插入图片描述
然后再碰撞事件后,将角色转换成角色,直接应用对应的设置的Effect类,最后销毁Actor
在这里插入图片描述
接着将actor添加到场景中,运行游戏,调试框输入showdebug abilitysystem
在这里插入图片描述
左侧显示血量数值当前为50
在这里插入图片描述
操作角色去吃掉血瓶,会发现血量增加10
在这里插入图片描述

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

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

相关文章

微机原理常考填空以及注意事项第(三)弹~

前面已经总结了200个常考题注意事项&#xff0c;可以翻阅查看。 以下仅个人总结的易错以及注意事项&#xff1a; 1&#xff0c;汇编语言源程序的基本格式&#xff1a; DATA SEGMENT;存放数据项的数据段 DATA ENDS EXTRA SEGMENT;存放数据项的附加段 EXTRA ENDS STACK1 SEGM…

Mybatis四大组件

一、Mybatis四大组件 SqlSessionFactoryBuild、SqlSessionFactory、SqlSession、Mapper。 二、SqlSession四大对象 Executor、StatementHandler、ParameterHandler、ResultSetHandler。 这里阐述一下上图的流程 Exeutor发起sql执行任务 1、先调用statementHandler中的pre…

输入某年某月某日,判断这一天是这一年的第几天?(Java)

思路&#xff1a; 1&#xff0c;分别定义三个变量来接收 年 月 日 2&#xff0c;累加已经过完的月份的天数 日期 3&#xff0c;二月份的天数要根据是否是闰年&#xff0c;随之改变 1 3 5 7 8 10 12 ---> 31天 4 6 9 11 ---> 30天 2 ---> 闰…

【bioinfo】收藏生信常用网址

文章目录 文件格式文档SAM/VCF工具手册bwa/samtools基因组统计学wikisam flag值查询序列反向互补TransVar 变异注释UCSC-blat在线比对常用数据库 NCBI/nsembl/HGNC论坛 biostars/SEQanswers查询文献影响因子假设检验查询生信软件查询在线可视化工具Proksee 文件格式文档SAM/VCF…

阿里云国外服务器价格购买与使用策略

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

为什么JDK1.7的HashMap会出现扩容死链

为什么JDK1.7的HashMap会出现扩容死链&#xff1f; JDK1.7版本的HashMap在多线程的情况下扩容出现死循环&#xff08;扩容死链&#xff09;&#xff0c;根本原因是&#xff1a;HashMap在进行扩容时需要进行数据转移&#xff0c;jdk1.7的版本数据转移使用的是头插法&#xff08…

【每日一题】最大交换

文章目录 Tag题目来源解题思路方法一&#xff1a;暴力法方法二&#xff1a;贪心 写在最后 Tag 【暴力法】【贪心法】【数组】【2024-01-22】 题目来源 670. 最大交换 解题思路 本题的数据规模比较小&#xff0c;暴力法也可以通过。以下将会介绍暴力法和本题最优法。 方法一…

【AIGC】Diffusers:扩散模型的开发手册说明1

主要组件 最先进的扩散管道 diffusion pipelines&#xff0c;只需几行代码即可进行推理。可交替使用的各种噪声调度器 noise schedulers&#xff0c;用于平衡生成速度和质量。预训练模型 models&#xff0c;可作为构建模块&#xff0c;并与调度程序结合使用&#xff0c;来创建…

阿赵UE学习笔记——12、植物系统

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次需要使用植物系统在地形上添加一些草和石头的装饰。 一、素材准备 之前介绍过&#xff0c;可以在Quixel上面获取免费的资源&#xff0c;所以我这里就下载了一些资源&#xff0c;有草和石头的…

基于springboot家政服务管理平台源码和论文

随着家政服务行业的不断发展&#xff0c;家政服务在现实生活中的使用和普及&#xff0c;家政服务行业成为近年内出现的一个新行业&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计家政服务管理平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效…

代码随想录刷题笔记 DAY12 | 二叉树的理论基础 | 二叉树的三种递归遍历 | 二叉树的非递归遍历 | 二叉树的广度优先搜索

Day 12 01. 二叉树的理论基础 1.1 二叉树的种类 满二叉树&#xff1a;除了叶子节点以外&#xff0c;每个节点都有两个子节点&#xff0c;整个树是被完全填满的完全二叉树&#xff1a;除了底层以外&#xff0c;其他部分是满的&#xff0c;底部可以不是满的但是必须是从左到右连…

Java 设计者模式以及与Spring关系(六) 装饰和模版方法模式

简介: 本文是个系列一次会出两个设计者模式作用&#xff0c;如果有关联就三个&#xff0c;除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道设计者模式有3类23种设计模式&#xff0c;标红是特别重要的设计者模式建议都会&#xff0c;而且熟读于心&#…

41.while语句

目录 一.什么是while语句 二.语法 三.执行流程图 四.举例 五.视频教程 一.什么是while语句 只要条件为真&#xff0c;while循环中的语句会一直重复执行。 二.语法 while&#xff08;表达式&#xff09;{//代码块 } 三.执行流程图 从流程图可以看出&#xff0c;while循环…

【JAVA语言-第14话】集合框架(一)——Collection集合,迭代器,增强for,泛型

目录 集合框架 1.1 概述 1.2 集合和数组的区别 1.3 Collection集合 1.3.1 概述 1.3.2 常用方法 1.4 迭代器 1.4.1 概述 1.4.2 常用方法 1.4.3 使用步骤 1.5 增强for循环 1.5.1 概述 1.5.2 使用 1.6 泛型 1.6.1 概述 1.6.2 使用泛型的利弊 1.6.2.1 好处 1…

基于TriDet的时序动作检测算法训练自己的slowfast数据

最近一直在研究时序动作识别和检测&#xff0c;也一直关注着目前的最新进展&#xff0c;有好的算法&#xff0c;我都会在我自己的数据集上运行看看&#xff0c;一方面是为自己累积相关算法&#xff0c;另一方面也是想看看&#xff0c;目前最新的算法是否可以应用到一些项目上。…

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

SpringBoot使用mybatis-plus代码生成器且xml文件生成在resource文件下

SpringBoot使用mybatis-plus代码生成器且xml文件生成在resource文件下 一、Pom依赖二、核心代码三、效果 一、Pom依赖 <!--项目代码初始化生成器两个依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator<…

axi_quad_spi

文章目录 系统框图正常模式XIP模式 性能IP 核配置AXI Interface OptionXIP ModePerformance Mode SPI OptionsModeTransaction WidthFrequency RatioSlave DeviceEnable Master ModeEnable STARTUP Primitive 寄存器映射0x40 (SRR) 软件复位0x60 (SPICR) SPI控制0x64 (SPISR) S…

WAF攻防相关知识点总结2-代码免杀绕过

WAF的检测除了有对于非正常的流量检测外还对于非正常的数据包特征进行检测 以宝塔为例 在宝塔的后台可以放置一句话木马的文件 宝塔不会对于这个文件进行拦截&#xff0c;但是一旦我们使用菜刀蚁剑等webshell工具去进行连接的时候&#xff0c;数据报中有流量特征就会被拦截 …

【仿网易云H5部署】Nodejs后台 + uniapp前台 部署

前言 之前在b站跟着学习写了前锋的<仿网易云音乐>uniapp项目 , 在这里记录一下H5版本的部署上线的过程. 这是该项目的b站链接:【千锋教育】前端项目_uni-app入门到实战项目之《仿网易云音乐》_哔哩哔哩_bilibili 一.后端 使用宝塔面板来部署 (1) 百度搜索宝塔面板, 复…