GAS实现连招的一种方案【后篇】
前言#
上文已经分享了一个用WaitGameplayEvent与AnimNotifyState来实现连招的方案,但是这个方案在多人联机的表现下却不是很好
原因#
让我们先了解一下Client调用TryActivateAbility()
在多人联机的过程:
简而言之,Client会先激活GA然后发送RPC给Server,Server一旦发现无法激活GA就会返回给Client让其回滚。这意味着,我们上一个方案的做法,有可能Server收到Client的RPC时,Server已经过了可以输入的区间了,于是就导致Server认为无法激活,Client回滚
所以我们之前的做法对于ACT游戏在多人联机下的表现是不可取的
分析#
之所以server会回滚这次连招,其实是因为区间早就过去了,意味着Try GA_Combo2的时候,发现没有其Required的ReadyTag,于是导致回滚。那如果我GA的激活没有RequiredTag呢,是不是就不需要回滚了?意味着不管怎么说只要Client发起Try GA_Combo2,Server就会让其激活,不会回滚,于是我们便开始改造。
大体的改造思路就是,在可以输入区间中把TryActivateByTag中传入的Tag改为下一段Combo的AbilityTag,这样就可以避免RequiredTag与异步事件的干扰。缺点就是没有预输入的区间了,一旦在区间内输入就会立马播放下一段连招。
改造#
之前我们的所有连招的GA的Abiltiy Tag
都是Ability.Action.Attack
,所以我们需要把各个Combo的Abiltiy Tag
改成其独立的Tag,并且取消异步等待事件:
然后在BP_DemoCharacter中添加一个GameplayTag变量,记得将变量改成Public,用于给ANS改变DebugKey触发的Tag
之后把之前的ANS_AttackBranch
改为ANS_Input,并且把其Begin与End改为下图:
然后在对应的Montage的区间中设置这个Tag就好
结语#
虽然之前的那个博主的思路很好,但是确实也不适用于多人联机下的连招。要是UE有官方的做ACT的教程就好了,就连官方的ActionRPG也是不支持多人联机的。还是希望有佬能分享自己的多人联机连招实现心得...
Demo项目地址:Vikyanite/GASDemo (github.com) / Vikyanite/GASDemo (gitee.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人