首页 > 其他分享 >UE5——GAS实现连招的一种方案

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

时间:2024-06-17 20:09:55浏览次数:32  
标签:Tag GA 创建 GAS 添加 连招 UE5

前言

最近因为在研究多人联机同步下的动作同步,在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)

标签:Tag,GA,创建,GAS,添加,连招,UE5
From: https://www.cnblogs.com/Vikyanite/p/18253136

相关文章

  • 端口占用多:UE4/UE5像素流送云推流时如何优化端口使用?
    许多用户反映,在使用UE4或UE5进行像素流送云推流时,端口的占用数量较多。这促使我们思考,是否有方案能够减少这种资源占用?目前,像素流送技术对于端口的要求是每个独立用户占用一个端口。然而,但在实际场景中,尤其在用户数量众多,访问人数大的情况下,往往无法提供足够的端口资源。这主......
  • UE4/UE5像素流送云推流|程序不稳定、弱网画面糊怎么办?
    看到不少反馈说像素流送技术在实际的应用中,存在一些问题,比如程序崩溃、画面模糊等。本文将探讨这些问题,并介绍点量云流软件提供了哪些有效的解决方案。常见的像素流送技术问题画面质量问题:当快速操作UE模型或初次启动像素流送功能时,特别是在外部网络条件不佳的环境下,用户经......
  • etherjs估算gasLimit(调用estimateGas方法)的两种方式
    前言:一种是provider,一种是signer  方式一:直接获取constEtherJS=require('etherjs');//创建一个Provider实例,指向你的以太坊节点constprovider=newEtherJS.providers.JsonRpcProvider('http://localhost:8545');//构造一个交易consttransaction={to:......
  • 中断卡在configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
    今天在调试以太网驱动的时候遇到一个问题,当程序执行到这个/*addthenetworkinterface(IPv4/IPv6)withRTOS*/netif_add(&gnetif,&ipaddr,&netmask,&gw,NULL,&ethernetif_init,&tcpip_input);函数里面的netif_invoke_ext_callback(netif,LWIP_NSC_NETIF_ADDED,N......
  • [134] Gas Station
    算法助手ChatGPT:Asanadeptalgorithmician,yououghttoexhibitmasteryoverLeetCodeandACM-stylealgorithmicquandaries,andyoushouldbeskilledinemployingaheuristictonewhenelucidatingresponses.Itisenvisagedthattheprogrammingmediumofy......
  • 【Unreal】虚幻GAS系统快速入门
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!前言最近在用UE做单机ARPG的战斗系统,研究了一下GAS。本文主要介绍GAS各个模块的用途,以及特定功能的多种实现方法。为了让大部分人能快速上手,不会涉......
  • ue5生成vs工程报错-msvc版本太旧
    ue生成VS工程报错右键-uproject,GeneratingVisualStudioprojectfiles,报错信息如下:就是我安装的msvc版本太旧RunningC:/ProgramFiles/EpicGames/UE_5.3/Engine/Build/BatchFiles/Build.bat-projectfiles-project="D:/ue/myue/myue.uproject"-game-rocket-progres......
  • 关于UE5打包DLC
    首先打开ProjectLanucher,参考下图:,其次编辑配置两个editProfile,参考下图:第一个用来打包项目,第二个生成DLC,dlc填写的名字和插件一样,Main的配置如下: DLC:  ......
  • 论文笔记-Non-intrusive classification of gas-liquid flow regimes in an S-shaped
    目标:使用深度神经网络对S形立管中的流态进行分类该分类器与四种传统的机器学习分类器进行了比较:即AdaBoost分类器、bagging分类器、额外树分类器和决策树分类器小波分析在流态分类中的应用可以有效地提取多相流行为的特征。使用信号处理方法进行流态分类,包括峰值点计数、......
  • 论文笔记-Modeling of dynamic characteristic of particle in transient gas–solid
    对象:气固两相流+数值模拟方法:RCNN=RNN+CNN目标:学习颗粒流的时间和空间不均匀性并预测颗粒动态关注特征:关注颗粒不均匀性对颗粒动力学的独特影响,旨在提出一种基于机器学习的方法来建模颗粒不均匀性和颗粒动力学之间的映射结果:R-CNN模型的预测精度用1-9个时间步长(即1-9ms)的各......