11. UE5 RPG使用GameplayEffect修改角色属性(二)

2024-02-02 06:04

本文主要是介绍11. UE5 RPG使用GameplayEffect修改角色属性(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇写了一下GameplayEffect的基础操作,这一篇进阶一下,讲解一下GameplayEffect堆叠功能,以及能够基于这个堆叠能够实现一些怎样的效果。

经过几天的查看,发现新版的更新的真不错,而且最上面竟然直接显示编译的错误,不需要编译后查看。
在这里插入图片描述

多个GameplayEffect堆叠的效果

上面我们设置的GE如果使用多个,每个会单独的去运行效果,会出现叠加回血的效果。而在英雄联盟这个游戏里面,我们会发现,角色使用药瓶不会出现多个药瓶同时使用,而是一个药瓶使用完成以后,才会继续使用第二个药瓶。在GameplayEffect里面,我们也可以实现同样的效果。
设置这一项,我们可以找到Stacking这一个配置,这是一个专门处理效果叠加的属性,如果为None,默认效果,每次添加效果之间互不影响。
在这里插入图片描述
如果选择Source或者Target
在这里插入图片描述
比如我设置Stack Limit Count 为3,选择Source,那么角色可以对每个目标叠加三层效果。但是如果你选择的是Target,那么就是不管多少人对目标叠加了多少层效果,目标身上只能叠加三层效果。
在这里插入图片描述
Stack Duration Refresh Policy 叠加效果时,是否更新持续时间 Duration
Refresh on Successfull Application: 叠加效果时,刷新持续时间,即使层数不增加也会更新。
Never Refresh: 即使叠加效果,也不会刷新。
Stack Period Reset Policy 叠加效果时,是否更新周期时间 Period
Refresh on Successfull Application:叠加效果时,每次都会更新周期时间 Period
Never Refresh: 即使叠加效果,也不会刷新。
在这里插入图片描述
Stack Expiration Policy
Clear Entire Stack:Duration结束时清楚所有层数
Remove Single Stack And Refresh Duration:Duration结束时减少一层,然后重新经历一个Duration,一直持续到层数减为0
Refresh Duration:Duration结束时再次刷新Duration,这相当于无限Duration,可以通过调用

void FActiveGameplayEffectsContainer::OnStackCountChange(FActiveGameplayEffect& ActiveEffect, int32 OldStackCount, int32 NewStackCount)

来处理层数,可以达到Duration结束时减少两层并刷新Duration这样复杂的效果。
在这里插入图片描述
上面的属性用来控制效果叠加,那么如果效果叠加满了溢出了怎么办,官方也有解决方案。
就是Overflow属性的配置
OverflowEffects:超过StackLimitCount数量的Effect被Apply时将会调用该OverflowEffects,可以设置多个
DenyOverflowApplication:对应于StackDurationRefreshPolicy,如果为True则多余的Apply不会刷新Duration
ClearStackOnOverflow:当DenyOverflowApplication为True是才有效,当Overflow时是否直接删除所有层数
在这里插入图片描述

5.3的GameplayEffect的新组件

在5.3版本中,GameplayEffect将一些组件模块化并封装到了Components里面,
在这里插入图片描述
一共十一个组件,接下来罗列一下每个组件的功能
Abilities Gameplay Effect component
这个组件主要是在GameplayEffect激活时,可以向目标添加的GameplayAbility
在这里插入图片描述
Addtional Effects Gameplay Effect Component
当此效果添加时或完成时,需要额外添加的效果。
On Appliaciton Gameplay Effects 在添加此效果时,额外添加的效果
On Complete Always 当此效果完成时,不管正常结束还是不正常结束时,添加的效果
On Complete Normal 当此效果正常结束时,添加的额外的效果
On Complete Prematurely 当此效果提前结束时,添加的额外的效果
在这里插入图片描述
Asset Tags Gameplay Effect Component
在添加此GE时,需要额外处理的标签(添加 和 删除),这个标签将放置在GE上面,只是作为一个GE的标记
在这里插入图片描述
Block Ability Tags Gameplay Component
添加或删除能够阻挡技能的Tags的组件,这些Tags会在GE运行时添加到Actor身上,用于阻挡其它拥有此Tag的GE或者GA的激活。
在这里插入图片描述
Chance to Apply Gameplay Effect Component
当前GE应用到Actor身上的几率,0为百分之0几率,1为百分之百几率
在这里插入图片描述
Custom Can Apply Gameplay Effect Component
自定义能够应用GE的组件,可以自定义条件来设置应用是否成功。
在这里插入图片描述
Gameplay Effect UIData Text Only
用于配置GE的UI信息,这里只有一个简单的TEXT,有需要的可以派生UGameplayEffectUIData类去添加自己需要的数据信息
在这里插入图片描述
Immunity Gameplay Effect Component
配置角色免疫其它GE的条件
在这里插入图片描述
Remove Other Gameplay Effect Component
配置移除其它的GE,满足设置的标签或者资源满足条件的GE都会被移除掉。
在这里插入图片描述
Target Tag Requirements Gameplay Effect Component
根据目标的Tag设置当前的GE的状态
Appliaction 为GE添加到目标身上时Tag的状态
Ongoing 为GE激活时Tag的状态
Removal 为GE被删除时Tag的状态
在这里插入图片描述
Target Tags Gameplay Effect Component
添加此GE后,对Actor身上带有的Tag进行操作(添加或删除),这个会随着GE的添加修改,在GE失效时移除。非Instant使用。
在这里插入图片描述

通过属性实现多种效果

上面介绍完了相关属性以后,接下来根据使用场景,罗列一下实现思路。这里不先讲GameplyaCue,只是单纯的罗列一下思路。

  1. 武器大师的被动
    在英雄联盟里面,武器大师的平a可以叠攻击速度,最多可以叠八层。每次平a增加一层被动,每次增加被动刷新持续时间,在一定时间内没有平a,将减少一层被动层数。以下是设置思路
    持续时间设置Has Duration (平a每次都有周期时间)并设置持续时间
    Period 设置为0,时间范围内一直起作用,然后属性修改那里修改攻击速度。
    Stacking Type 设置Aggregate by source或者target都可以,毕竟都是添加到自身。
    Stack Limit Count 设置为8,可以叠8层。
    Stack Duration Refresh Policy 设置为Refresh on Successful Application(每次平A刷新持续时间)
    Stack Period Reset Policy 就随便设置,用不到。
    Stack Expiration Policy 设置为Remove Single Stack And Refresh Duration 在每次一个持续时间到了,只减少一层
    Overflow 不需要设置。

  2. 火男的火焰被动
    火男的火焰被动每次使用技能命中英雄后会叠加被动,造成持续伤害,当被动叠加三层以后会造成火焰爆炸,并清空层数。
    Duration Policy设置为Has Duration (被动有时间限制)并设置持续时间
    Period 设置为1 (每秒造成伤害)
    Execute Periodic Effect on Application 设置为false,添加效果时,不会支持触发伤害
    接下来需要设置伤害数值,这里需要根据自身的属性得出火焰在目标身上的伤害。
    Stacking Type 选择 Aggregate by Source 自身可以在身上挂效果
    Stack Limit Count 设置为2,因为第三层持续伤害被动将被删除
    Stack Duration Refresh Policy 设置为Refresh on Successful Application(每次技能命中刷新持续时间)
    Stack Period Reset Policy 设置为Refresh on Successful Application (每次技能命中以后,也刷新周期时间)
    Stack Expiration Policy 设置Clear Entire Stack 持续时间结束清除所有层数
    OverflowEffects 里添加火焰爆炸的Effect
    DenyOverflowApplication 设置为true,多余的effect不会刷新层数
    ClearStackOnOverflow 设置为true,触发火焰爆炸时,将目标身上的火焰层数清除掉

而火焰爆炸就简单一些,只需要设置持续时间和周期时间都为3秒,然后修改角色属性即可。

  1. 持续回复的血瓶
    英雄联盟里面的血瓶可以实现持续恢复血量,但是一次只能使用一瓶,如果多次使用,将会叠加,一瓶使用完成后,将接着使用,直到血瓶效果结束。
    实现的原理也很简单,其实就是使用一个GameplayEffect设置叠加模式,保证能够正确设置药瓶使用数量和时间,然后设置时接着触发另一个GameplayEffect,这个GameplayEffect用来触发周期性回血,在第一个GameplayEffect失效时,删除周期性回血Effect。
    首先实现设置使用层数的GameplayEffect
    Duration Policy设置为Has Duration
    Duration Magnitude 设置一瓶药的恢复时间
    属性这里添加两个模块,一个添加一个Tag用于标记(这个在GE失效时移除),
    另一个额外附加的GameplayEffect(额外附加的就是回血的GameplayEffect)这个功能就是在应用了此效果后,会将设置的额外的效果应用到目标身上。
    (最新的5.3版本,将多余的功能都合并到了一个数组里面,这样布局也更加清晰,需要什么添加什么模块即可)
    在这里插入图片描述
    修改属性我们不在这个GE里面做,而是在另一个GE里面。

接着使用
Stacking Type 选择 Aggregate by Source 可以堆叠层数
Stack Limit Count 设置为0 可以无限堆叠
Stack Duration Refresh Policy 设置为 Never Refresh 中途吃药也不会刷新,只增加药物层数
Stack Period Reset Policy 不用管,这个没有周期
Stack Expiration Policy 设置为Remove Single Stack And Refresh Duration 在每次一个持续时间到了,只减少一层
Overflow 不需要设置,吃药随便吃咯

另外一个GameplayEffect是回血用的GameplayEffect,我们将持续时间设置为无限,周期时间设置为1s,添加一个模块在actor缺少了相关的Tag时,将自身GE移除。
在这里插入图片描述
每次周期到期时,恢复10点血量,当前效果生效必须有相关tag(其实这一步不是必须)
在这里插入图片描述
堆叠的处理就是只保证有一层效果,多余的层数也不会刷新持续时间,刷新周期时间,额外超出的层数也不做处理。
在这里插入图片描述
总结:使用药瓶添加记录时间的GE,并添加Tag和持续回血的GE,在记录时间的GE到期,将Tag和持续回血的GE移除。

参考文章:
UE5-GAS插件UE5.3改动
虚幻引擎游戏技能系统文档
GameplayEffect(一)功能
虚幻插件GAS分析03-0 GameplayEffect标签面面观-标签栏

这篇关于11. UE5 RPG使用GameplayEffect修改角色属性(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出