UE5——GAS实现连招的一种方案

news/2024/10/2 8:42:39

前言

最近因为在研究多人联机同步下的动作同步,在Google上很幸运搜到了一篇日本博主写的GAS编写连招的方案,于是就打算贴出来分享一下,顺便讲讲实现的心得:

【UE5】GamePlayAbilitySystemによるコンボ攻撃の実装とそれに利用する小ネタ 前編【GAS】

【UE5】GamePlayAbilitySystemによるコンボ攻撃の実装とそれに利用する小ネタ 後編【GAS】

注:以下内容皆已假定读者已具备初步的GAS系统相关概念与其创建方式

方案讲解

1.蒙太奇的准备

首先你需要创建一个连招蒙太奇(把连招各个招式Sequence放到一个Montage里面,并添加不同的Section标明),类似于下图:

image-20240617110112279

然后把Section之间的Link移除

image-20240617110206201image-20240617110227849

2.GA(GameplayAbility)的准备

右键单击内容浏览器中的空白区域,然后选择 GameplayAbility Blueprint → 创建

image-20240617110558886

然后继承于GameplayAbility

image-20240617110710713image-20240617110822785

然后我们打开我们刚创建的GA的蓝图,并在其EventActivateAbilty中添加以下结点:

image-20240617112008622

然后我们在其Class Default中为GA添加Tag用于控制GA激活条件:

image-20240617112242340

由于最开始我们都没有Tag,所以我们需要添加自己所需要的tag(Tag会按照.进行树形划分):

image-20240617112452489

添加如下的Tag

image-20240617112939412

Ability Tags: 用于激活GA

Activation Owned Tags: 当GA被激活时,Owner会添加上这些Tag

Activation Blocked Tags: 当拥有这些Tag其中之一的时候,此GA不会被激活

至此,GA的准备工作就已经完成

3.赋予GA与激活GA

首先在Character的蓝图中加入GAS的Component

image-20240617161502330

然后我们创建一个Ability数组,用于赋予Character最开始的GA

image-20240617161542289

然后我们在BeginPlay的时候给予Character这些GA, 并且添加一个DebugKey用于激活我们刚刚写的GA:

image-20240617161645488

4.连招★

在做连招之前,我们需要了解连招的各个时段。一般来说连招会在一段区间中,用户的输入才有效,比如你飞快的点两下鼠标,不会直接触发第二招;你两次点击间隔稍短,会需要等一小会儿才会触发下一招;你要是两次点击间隔稍长,就会直接下一式;你要是间隔很长,可能就会重新触发第一式,所以连招的实现就会类似下图。

image-20240617165153171

所以我们的设计思路就是,在蓝色的区间内,认为玩家的输入是有效的,然后会在紫色的区间内,如果检测到玩家的输入,那么就可以触发下一连招,于是我们就需要做到以下的事情:

  1. 在蓝色区间中的输入才算成功(用Activation Required Tags实现)
  2. 蓝色区间中成功输入后,等到紫色区间在播动画(用Wait GameplayEvent + 一个等待Tag 实现)

于是我们先创建GA_Attack_02, 并连接节点与添加对应Tag:

image-20240617172608059

在Character中赋予

image-20240617172715095

然后我们就要解决Montage播放途中的那两个区间的事情,这个时候就轮到非常好用的AnimNotifyState登场

蓝色区域(等待用户输入)的编写

我们右键内容浏览器的空白处,选择 Blueprints -> All Classes中搜索 AnimNotifyState

image-20240617191620215

创建了一个ANS_AttackReady用于给Owner添加ReadyTag

image-20240617192006048image-20240617193001682

然后我们打开刚刚创建的ANS的蓝图,给他创建一个变量用于传入ReadyTag,然后重写其Begin与End方法

image-20240617193104993

记得要公开,不然没办法让外界输入

image-20240617194401422

image-20240617193128238

image-20240617193147289

紫色区域(播放连招)的编写

我们同样也用AnimNotifyState来写,创建一个ANS_AttackBranch,并且重写他的Tick方法,用来激活等待Ability.State.NextAttack事件的Ability(下一连招)

image-20240617193944178

两个区间的放置

我们在我们的连招Montage的Notifies中添加好我们刚写完的两个ANS,然后稍微调整一下范围

image-20240617194824450

不要忘记把这个ANS的ReadyTag加上

image-20240617195131212

结语

现在网上大部分的GAS实现连招都不是通过AnimNotifyState的方式,就导致蓝图会做比较多的控制工作。有幸看到这篇文章,帮我省去了很多时间,特此分享,同时也特别感谢博主将这种方式分享出来。

对了网上还有另一种方式,是《幻塔》分享的GameplayAbility框架在《幻塔》手游中的应用及优化。《幻塔》也是用了GAS系统,并且对于连招的实现是通过实现了一个Map用于决定下一步跳转的连招,这篇文章讲得不多(毕竟还是人家的饭碗)...

Demo项目地址:Vikyanite/GASDemo (github.com)

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

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

相关文章

cuda程序优化-3.通信简介

GPU进行卡间通信/多机通信的算法简介硬件结构 CPU<->GPU: 通过PCIe进行通信 GPU<->GPU: NVLink, 通过Switch桥接器辅助访问其他卡的HBM 多机通信: InfiniBand with GPU Direct RDMA(简称GDRDMA), 需要专用网卡卡间通信-Ring AllReduce nvidia文档 1. 初始状态卡数:…

【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法

SSL: CERITIFICATE_VERIFY_FAILED certificate verify failed: unable to get local issuer certificate问题描述 访问App Service的高级工具KUDU站点的URL,遇见无法访问,在通过az webapp deploy发布时候,也遇见SSL错误 (SSL: CERITIFICATE_VERIFY_FAILED certificate verif…

计算机组成原理学习 Part 2

系统总线 总线 连接各个部件的信息传输线,是各个部件共享的传输介质 结构单总线 面向 CPU 的双总线 以存储器为中心的双总线 三总线 三总线的又一形式 四总线分类片内总线:芯片内部的总线 系统总线:计算机各部件之间的信息传输线\[ \begin{cases}数据总线 & 双向 \quad…

NumPy 差分、最小公倍数、最大公约数、三角函数详解

NumPy 助你处理数学问题:计算序列的差分用`np.diff()`,示例返回`[5, 10, -20]`;找最小公倍数(LCM)用`np.lcm()`,数组示例返回`18`;最大公约数(GCD)用`np.gcd.reduce()`,数组示例返回`4`;三角函数如`np.sin()`,`np.deg2rad()`用于角度弧度转换。别忘了`np.arcsin()`等反…

LVGL line组件

目录Line(线条)的概念线条组件的使用创建线条对象设置点数组确定y轴的方向(可选)设置线条风格(可选)创建风格设置风格将创建好的线段组件添加到父对象上示例代码:运行结果 Line(线条)的概念线条组件的使用 创建线条对象设置点数组 line组件的实现原理就是通过连接两个…

课堂测试企业族谱分析1-4问

第一问: 查询: 第二问: 查询公司的股东 可视化:可隐藏和展开: 第三问: 投资可视化,查询公司名称: 也可以隐藏和展开: 第四问: 一个公司的图谱用左右树图来可视化: 也可以隐藏和展开: 剩下的第五问第六问明天发

第一周:时间复杂度该怎么看?

文章小结: 1.算法时间复杂度是什么官方定义:算法在编写成可执行程序后,运行时所需要的资源,资源包括时间和内存。解读:可执行程序运行所需要时间的一个量化指标。例如O(1),常量级。 2. 常见的时间复杂度O(1) :常量级 O(n):线性 O(logn):对数 O(nlogn) O(n^2):平方 O(…