欢迎光临散文网 会员登陆 & 注册

【我帮鹰角修bug】一堆bug和“bug”的安洁莉娜

2020-06-10 17:47 作者:等--等灯等灯  | 我要投稿

前言

为啥要给安洁开个专场呢?当然是因为她身上的“bug”有点多
而且最重要的是,原来只有1个“bug”,周年庆之后增加到了3个

而鹰角目前好像还是没有什么动作,所以觉得有必要拿出来说一说...


本期内容包括:
安洁莉娜质素访客皮肤3技能开启动作错误,详见:https://bbs.nga.cn/read.php?tid=21586319
安洁莉娜质素访客皮肤3技能弹道发射点与原皮不同,详见绯红权杖攻略组视频

安洁莉娜2,3技能攻速不稳定,详见:https://bbs.nga.cn/read.php?tid=20267194

安洁莉娜质素访客皮肤技能开启动作错误

大概问题就是,安洁换上新皮肤后3技能的开启动作很不自然

详情可以查看此视频1分18秒处

并且可以发现这个开启动作和2技能的开启动作一致

你以为这是丫丁偷懒没做?
不不不,去prts上看一下,会发现有一个名称名为Skill2_Begin的动画,这个动画的动作刚好能对上3技能开始动作
那么这很明显是鹰角把哪里搞错了

方舟在调用角色动画的时候并不是直接调用的动画原名称
而是赋予动画一个/多个程序名,随后通过程序名调用动画
这样一来,如果有新皮肤啥的,或者是其它特殊情况(例如不同攻击模式下是出生动画),只需要改变这个命名过程即可,不必每一个模式或皮肤重写调用的名称
而安洁新皮肤出错的,正是这个命名过程(被称作SingleSpineAnimator)

安洁皮肤的SingleSpineAnimator

这张图可以看出,名为Skill1_Begin的动画(即2技能开始的动画),被赋予了Skill_2_Begin的程序名
而安洁3技能的开始动画,调用的是Skill_2_Begin的程序名

这样一来,装备新皮肤时,3技能的开始动画就变成了实际上的2技能开始动画
这很明显是个bug,如果鹰角要修复的话把这个新皮肤的SingleSpineAnimator改掉就行

安洁莉娜质素访客皮肤技能弹道发射点与原皮不同

大概问题是,绯红组发现安洁换上新皮之后3技能对敌人的攻击弹道时间似乎比原来短了一点
但事实上,弹道速度被写死在[uc]projectiles文件中,这是皮肤无法改变的
距离/速度=时间,速度变不了,变的就只能是距离了

方舟大部分带有弹道的攻击需要有一个弹道的发射点
这个发射点可以是头,脚,武器,地面等等,而安洁3个技能的弹道发射点全部被设置在了MUZZLE,即武器点上
而这个muzZLe point,又需要绑定spine动画中的一根特定的骨骼

安洁皮肤MuzZLePoint所绑定的骨骼

从上图可以看出,这个muzZLe point绑定的是一根名为"F_MuzZLe"的骨骼(两个皮肤一样的就不重新放图了)
那让我们看看这根骨骼在哪

原皮肤3技能开启时MuzZLePoint所处位置
新皮肤3技能开启时MuzZLePoint所处位置

这是两个皮肤开3技能时F_MuzZLe骨骼的位置
可以看到新皮肤的F_MuzZLe骨骼较原皮向前平移了100多个单位
这样一来,弹道速度不变的情况下,弹道从发射到到达朝向目标的时间将被缩短,而到达背向目标的时间将会增加

当然影响不仅是3技能,实际上2技能受到的影响更大

原皮肤2技能开启时MuzZLePoint所处位置
新皮肤2技能开启时MuzZLePoint所处位置

新旧皮肤战斗差异这个问题不好定性
个人倾向于皮肤制作者没有考虑到实战需求
不过还好实战影响不算太大,最多在需要卡抬手时有些影响

安洁莉娜2,3技能攻速不稳定

那么下面这个就是实战影响很大的了
微粒模式和反重力模式的攻速不稳定问题
大概表现为微粒模式和反重力模式攻击间隔不恒定,会有所波动

在解释清这个问题前,我们先需要了解下方舟攻击是什么,依赖于什么

方舟中大部分攻击依赖于spine动画
spine动画是一种骨骼动画,通过将小块的"零件"绑定到"骨骼"上,制作成模型,然后调整"骨骼"来达成比较逼真的动画效果
同一个模型可以拥有多个不同的动画
而对于每个动画,制作者只需要制作关键帧,并做好骨骼的设定,中间的补间会由程序自动完成

不过,在每个动画中能够插入的不仅仅只有决定动画走向的"关键帧",还有一个叫做"事件帧"的东西
这个"事件帧"是留给动画外程序的端口,动画外程序可以检测特定"事件帧"的播放来在特定时间点上执行特定的任务
对于方舟来说,大多数(之后会讲到例外)攻击就是在检测到攻击动画中"OnAttack"事件发生时执行的
举个例子说的简单点,就是把能天使的OnAttack事件帧放到铳喷火的时候,所以每次攻击都是在铳喷火的时候执行,看起来就跟因为铳发出了子弹所以打到人了一样
而对于大部分攻击来说,所谓的"前后摇"就是从攻击动画播放开始到"OnAttack"事件以及从"OnAttack"事件到攻击动画播放结束所需要的时间

攻击是否依赖spine动画事件会由一个名为waitForAttackEvent的变量决定
当攻击动画中无OnAttack事件时,该变量强制为False

方舟的攻击速度也可以依赖很多种因素,这个由一个名为timeMode的变量控制
timeMode=0 为 FROM_ATTACK_SPEED。即攻击冷却依赖于攻击速度。至于怎么让动画适应间隔是别的变量的内容。典型例子是各类普攻。
timeMode=1 为 FROM_ANIMATION。即攻击无条件依赖于动画,与攻速无关。动画按默认速度播放,不受攻击间隔影响。典型例子是绝影。
timeMode=2 为 SPECIFIED。即攻击冷却需要指定,与动画攻速均无关联。典型例子钙质化,柏喙扔飞刀,爱国者的真伤光环

而当攻击间隔依赖于攻击速度时,默认情况下会让攻击动画拉伸(最长maxAnimScale倍)或收缩(最短0.1倍)以适应攻击间隔

但有一种名为channeling情况例外
这种情况的共性是是,会在一段时间内始终保持一个动作进行攻击,而不是像正常攻击中一样会在常态动作和攻击动作中切换
原因是因为其加载了一个特殊的动画模板用于保持一个动作循环播放,而这个动作不被攻击模板所调用,因此会保持默认速度播放
很明显,安洁的2,3技能都属于channeling
同样属于channeling的技能还有很多,例如精神爆发,奇美拉,火山,脑啡肽,钙质化等等

那么说了这么多,为什么安洁的技能会出问题?
首先,安洁的攻击waitForAttackEvent变量为True,而且她2,3技能动画中真的有有效的攻击事件。这意味着正常情况下安洁的攻击只能在动画关键帧进行
其次,安洁的攻击依赖攻速,这意味着她本应去调整攻击动画的长度使其适应攻击,调整不了时用默认动画填充
最后,安洁在技能期间属于channeling,这意味着她的动画只能按默认速度循环播放,不能被调整长度,不能被插入默认动画

这三者缺一不可的共同作用造就了安洁的奇葩攻速
安洁技能期间的攻击只能在特定的时刻进行,而这个时刻又不依赖攻速
这样一来,能够进行攻击的时刻只能是攻击循环动画长度的整数倍,而堆积的攻击行为会在一个时刻多次进行
这就是安洁2,3技能攻速不稳定的真正原因

那么如何改成正常模式呢?有两种方案
第一种,将waitForAttackEvent改为False,使攻击不依赖动画事件,从而使其在达到冷却时能够立刻进行
第二种,将安洁23技能循环动画中的攻击事件全部删去,原理和上面那个一致(这就是为啥之前开玩笑说出个新皮肤就能修好)


本文原载于NGA:https://bbs.nga.cn/read.php?tid=21970478

作者为本人

此专栏以CC BY-NC-SA 4.0协议发布

【我帮鹰角修bug】一堆bug和“bug”的安洁莉娜的评论 (共 条)

分享到微博请遵守国家法律