本文来自于新《战神》首席系统设计师Vince Napoli(现在在EA做Principle Combat Designer)的系列博文,《战斗回想》包含四篇文章。
战斗回想:《战神》中的闪避
游戏战斗设计易忽视环节:硬直动画
正文
手柄震动是每个游戏都会使用的技巧之一。由于它的普遍存在,当它做得特别好的时候,却往往会被忽视。特别是在战斗中,一个好的手柄震动往往影响你的感受强烈与否。
例如,《命运》中枪械开火和榴弹爆炸的手柄震动总是让我感到非常爽。震动的频率和强度与曳光、枪口火焰和命中火花非常匹配。
另一个出色的震动设计是《阿卡姆骑士》中的蝙蝠车。我记得它对于手柄震动的使用方式有相当多的难以察觉的细微变化,在漂移、撞击、助推加速等状态下轻微的方向变化都会有相应的震动反馈。
至于《战神》中的手柄震动,感谢George Mawle和Phil Wilkins(非凡的玩法程序员!)的无限耐心和努力,增强了震动系统,以便能够开展许多疯狂科学家般的尝试和微调。所以,我想回顾一些或复杂或普通的手柄震动的实现过程可能会很棒。
首先,比其做出独特的震动效果更重要的是保持一致性。一旦确定了所有要触发震动的位置和事件,就必须保持一致。如果你已经确定击中或碰撞敌人会触发震动,那么所有攻击都应该触发。如果不这样的话,那么其他所有不能触发震动的攻击就都被弄砸了。这会让这些攻击感觉更弱,这很不好。
我们在许多常见和不常见的地方都会使用震动,例如:
- 攻击结算
- 与地面或墙面的猛烈碰撞(武器或角色)
- 所有的爆炸效果或粒子效果触发
- 蓄力动画中
- 大型环境互动——比如打开一扇大门
- 在近距离(约 10 米)被挑空之后落地的敌人
- 在近距离(约 10 米)被击退或击飞而撞墙的敌人
并且所有这些触发都需要保持一致:无论是过场动画中、还是处决动画中还是基本的攻击动作中,都是如此。这个规则始终适用。
震动类型
从PS4开始,其手柄的大(左)和小(右)马达都可以用模拟量触发。对我来说,右边的马达,尤其是在单独震动的情况下,往往感觉更像是研磨或切割。左边更重的马达在单独震动时会自然地表现出爆炸和钝器撞击的感觉。
为了在大多数情况下确保快速和一致的响应,我发现最简单的方法是使用共享震动库。我发现一种有效的方法是让两个马达的震动持续时间不同从而均衡地实现相同地振幅(中到高)。因为持续时间决定了震动“强度”,大概可以这么说吧。对于一般的震动,我发现使用非常小的线性下降/上升是比较好的,并且基本上只需要在第一帧设置为最大值,并在最后一帧将其归零。这样最终会得到一些非常合适且易于模块化的震动模式,如果你需要大面积的覆盖震动时,这种做法就很普适。例如,下面这样的设置:
- 震动_特大 = 0.65 秒
- 震动_大 = 0.4 秒
- 震动_中 = 0.25 秒
- 震动_小 = 0.1 秒
但是,在《战神》中有几个特殊的震动实现,能体现出花精力去单独编写一些定制化独特震动是有意义的,我们尝试通过让其中一个马达的震动占比远远高于另一个来获得独特的力量反馈,或是编写特殊曲线或衰减,又或将不同的震动相互叠加。
斧头粘滞/基本连招
我先快速解释一下我所说的“斧头粘滞”是什么意思——这是我们为新《战神》创造的一个特殊功能,目的是创造一种更高级的顿帧。这个效果不是简单地将两个对象的动画暂停一小段时间(传统方法)来增强打击到敌人的感觉,为了试试能不能用一种更真实的表现来代替老的手法。我们结合使用了动画混合和自定义IK,组成了我们的“固定”系统。当奎托斯攻击敌人时,我们把斧头固定在打点上(有微小的位置修正/预测),奎托斯和敌人都会在判定的一瞬间转入一个展现打击感的全新动画,几乎没有或真的完全没有补间时间。
在这个新动画中,有几帧我们称之为“拖拽”,这段时间内奎托斯将继续缓慢地移动他的手臂,但斧头保持在原位。然后,仅仅几帧之后(取决于是什么攻击),斧头会跟上奎托斯的手臂并略微改变了奎托斯最初挥砍的轨迹。对我们来说,保持斧头的碰撞判定也很重要,这样它仍然是能够触发新的攻击判定。我们花费了大量的时间和精力来尽可能地在保持打击感的同时减少“粘滞”的持续时间。
为了增强这种效果,实际上在粘滞过程中有两种震动。第一种是快速、均衡的震动,没有进出的过渡。然后紧随其后,会以右侧小马达为中心的播放一个持续时间较长的持续衰减的震动。在配合动画的情况下,玩家仿佛能体会到把斧头从敌人身上扯下来的感觉。
斧头投掷
让R1快速投掷和R2慢速投掷在尽可能多的方面不同是很重要的——手柄震动也不例外。我们还想确保玩家能够分辨出被动震动与打击到敌人或撞击到墙面和地面时的区别。
对于水平投掷而言,因为斧头旋转得非常快并且是一个快速投掷,所以我们设计了一个非常尖锐的震动,更多使用右侧更轻的马达。
但对于垂直投掷来说,我们想强调斧头转动时的重量感,就好像你能感觉到旋转一样。为了获得这种效果,我们使用了一个循环锯齿波,它均衡的利用左右两个马达以获得更强的重量感——就像随着斧头的旋转一起震动。
图1为水平投掷;图2为垂直投掷
每当我们撞击到墙面或地面和打击敌人时,也是更多使用左侧马达,幅度上几乎没有上升和下降的过渡时间。这使打击感更明显。
斧头召回
召回也使用了类似的两种震动的结合。当召回开始时,会出现快速的强烈震动来模拟斧头被拔出的感觉(伴随着斧头自身的颤动动画!)。之后,我们使用循环震动,同时斧头以较低的振幅在空中旋转,更多使用更小/更轻的马达。
图1为斧子颤动;图2为空中旋转;图3为接斧
然后,捕获器会尽可能快地使两个马达的振幅达到最大值。所有的震动波形参考上图。(再次特别感谢 George 出色的调试!) (译者注:参考召回利维坦之斧最后的斧头震动和登台表演部分)
冲刺和格挡
最后两个震动是最有争议的,并且花费了最长的时间来打磨,因为冲刺和格挡的使用频率太高了。团队成员需要大量额外的迭代时间和游玩反馈才能找到一个合适的平衡点。
在冲刺的方面,我们采用了更平滑(适度的转进和转出)的金字塔状震动,并在每次震动之间有明显的时间间隔。这是为了尝试可不可以不去匹配脚步的感觉——就好像奎托斯开始冲刺后的第一步踩地格外的重。
打开盾牌的震动分为两部分——一个低强度且平滑的金字塔形震动用来模拟盾牌的弹出,当盾牌变形完毕时则是一个更强的爆发性震动。
震动的信息传达功能
最后,震动可以非常有效地用作信息传达——表示蓄力完成、冷却完毕、残血\危险状态等。在新《战神》中,缓慢增强的震动表达重攻击投掷正在蓄力,蓄力完成后——会发出更强烈的爆发性震动来表示蓄力完成了。这让玩家能够确实地感受到游戏机制,并且渴望进一步在战斗中熟练地利用它们。
对某些震动而言,我们的调整可能用力过度了,但最终结果似乎非常好。显然让玩家感到满意需要做很多事情,但做好手柄震动始终是一个很好的起点!