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标签面面观-标签栏

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

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

相关文章

【SpringBoot】SpringBoot的自动配置原理

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 自动配置 啥叫自动配置呢?简单说就是springboot根据我们开发者的行为猜测你要做什么事情,然后把你要用的bean都给你准备…

vue3使用is动态切换组件报错Vue received a Component which was made a reactive object.

vue3使用is动态切换组件,activeComponent用ref定义报错 Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef ins…

【Linux】初始进程地址空间

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 目录 一、再谈fork二、程序地址空间2.1代码验证 三、虚拟地址&am…

数据结构+算法(第05篇):数组和链表

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

前端工程化之:webpack1-8(loader)

一、loader webpack 做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。 更多的功能需要借助 webpack loaders (加载器)和 webpack plugins (插件)完成。 webpack loader : loader 本质上是…

数据结构哈希表(散列) 之Hash

声明: 此文章仅限于记录学习之用 , 受限于自身水平和理解能力 , 因此结论可能是不正确的. 如果您需要学习,建议参考其他文章 看了下网上一些大佬的教程, 写的云山雾绕的. 简单总结下吧. 以言简意赅为主. 介绍下hash hash 就是把任意输入通过算法生成一个int值. 这个值就是放…

如何使用 Supabase Auth 在您的应用程序中设置身份验证

在本文中,您将学习基本的关键概念,这些概念将帮助您掌握身份验证和授权的工作原理。 您将首先了解什么是身份验证和授权,然后了解如何使用 Supabase auth 在应用程序中实现身份验证。 (本文内容参考:java567.com&…

Spark入门01-Spark简介

1 Spark是什么 Spark是用于大规模数据处理的统一分析引擎。对任意类型的数据进行自定义计算。 可以计算:结构化、非结构化,半结构化的数据结构,支持使用Python,Java,Scala、Sql语言开发应用程序计算数据。 计算框架&a…

微服务—Docker

目录 初识Docker Docker与虚拟机的区别 镜像与容器 Docker架构 常见Docker命令 镜像命令 容器命令 数据卷挂载 直接挂载 初识Docker 在项目部署的过程中,如果出现大型项目组件较多,运行环境也较为复杂的情况,部署时会碰到一些问题&…

【力扣经典面试题】189. 轮转数组

题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 …

探索Viper-适用于GoLang的完整配置解决方案

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 对于现代应用程序,尤其大中型的项目来说,在程序启动和运行时,往…

【Docker与微服务】基础篇

1 Docker简介 1.1 docker是什么 1.1.1 问题:为什么会有docker出现? 假定您在开发一个项目,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依…