译文|2D 平台游戏操作:如何避免手感发软和手感僵硬

作者:highway★
2018-11-29
100 127 4

作者:Yoann Pignole(游戏/关卡设计师@Ubisoft)翻译:highway★

(译注:文中涉及到代码均为伪代码,图片上的英文没几个,如果有疑问,还请自行对照词典,见谅)

矛盾的是,这两种感觉背后的问题往往是同样的:对玩家输入反应不灵敏,不精准。

我的目标是帮助新手游戏设计师(也许是更有经验的游戏设计师)避免这种控制感受。但请记住,反应和精确控制不是必须的,也不适用于所有游戏。

因此,在澄清这一点之后,让我们谈谈在我看来可能造成玩家会有这种感觉的常见原因:

动画优先

第一代波斯王子,另一个世界和黑暗灵魂(译注:如果你还不了解这三款游戏,最好先去搜一下看看,然后再回头来看下面的内容。)有什么共同之处?答案:在玩家输入之前优先考虑玩家动画。如果这 3 款精彩游戏以这种约束构建他们的游戏玩法,也许这就不是你想要的“反应性”游戏。

详细的说,当动画具有“优先级”时,玩家将无法在另一个动画仍在播放时执行某些操作:

如果你希望避免这一点,非常简单:尽管它会削减你的角色动画,但要完全优先考虑玩家的输入。

对经验丰富的设计师来说,虽然这个问题很常见,但也千万别忘了!

地面摩擦力低

我所说的摩擦力是一种力,当玩家在相反的方向松开摇杆时,它会在施加在角色速度上,直到玩家停下来。

是的,有一个比较低的地面摩擦非常酷,特别是当你配上一个漂亮的对应动画时!但是当你的玩家在全速移动时需要 0.5 秒才能完全停下时,这时间就太长了!

如果不是在冰平台上或者角色踩着滑板之类的东西,要小心地面上的摩擦力太低,别犹豫,增加它吧。

改变方向时没有反应

如果你使用经典的系统,来控制你的玩家在地面上的移动,比如:移动加速度,最大速度和摩擦力来帮助停下玩家,也许你注意到当你突然改变方向时会出现你没有想到的结果:玩家没有反应过来其实他们还需要一点儿时间才能向另一侧走。

让我们用 2D 平台游戏来解释。每圈的速度计算是:

speed = speed + acceleration (当然有最大速度限制!)

如果玩家按下“右键”,则加速度为正,速度增加为正值,角色向右移动。

现在,如果玩家突然按下“左键”,则加速度现在为负,并且速度从正到负逐渐减小 ( 速度从正变为负需要一定的时间 ),玩家逐渐减速到最后向左移动。看下图:

那么,现在,解决方案是什么?实际上它很简单:你只需要使用“反应百分比”。

当玩家以与实际速度相反的方向输入输入时,我称之为“反应性百分比”是加速度的额外百分比:

If 输入方向与实际速度方向相反
     speed = speed + acceleration + acceleration * reactivityPercent
Else
     speed = speed + acceleration

看下图:

该解决方案也可以在 3D 环境中使用,稍作修改,因为方向可以“或多或少”彼此相反。这个想法是对这个加速百分比应用一个比率,与“相反的量”有关:

//输入和实际方向之间的反对率
oppositionPercent = opposition ratio between input and actual direction (0是相同的方向,1完全相反)

speed = speed + acceleration + acceleration * reactivityPercent *oppositionPercent

模拟摇杆上的非模拟速度

有些游戏使用 2 个速度值,通常是“行走”和“跑步”。

如果这个解决方案在 8 位和 16 位主机上的手柄上效果很明显,因为当时的手柄是定向性交叉控制运动(默认情况下,玩家要走路,按下一个按键,角色移动)(译注:最好的理解是 PS 的手柄断开的十字键……),但在现在普遍的带模拟摇杆的手柄上就有点不合逻辑了:因为当你的拇指控制摇杆是渐进的话,你也期望速度是渐进的。

只有这两个值与模拟摇杆一起使用并不总是会产生“僵硬”的感觉,但是,如果这些值彼此相距太远,玩家将会感觉到这个“阶段”在模拟摇杆的中段。

(译注:如果你常玩各种 3D 游戏,就会感受到很多中小型公司制作的质量一般的游戏的生涩手感,你控制的主角总是走到你不想让他去的地方……)

模拟速度实现起来非常简单,因为大多数商业游戏引擎针对每个轴都有 -11 的值。因此,您可以确定当前最大速度设置“最大”的最大速度(当你的摇杆全部向右/向左时的最大速度):

currentMaximumSpeed = MaximumSpeed * AnalogStickRatio

当然最好以同样的方式调节加速度。

重力低

太低的重力值可以明确地给你这种跛行的控制感受,就像你的角色是羽毛或是在月球上。(译注:很多这样令人尴尬的游戏……)

你可以选择这么做,但有时候,设计师会降低重力以使平台更容易挑战(或者保持地球默认值为 9.81m / s,不适合其物体尺寸)。这是一种可能性,但请记住,你有失去“体重感”的风险,这对于在挑战平台方面取得成功是非常重要的。

空中控制(空中加速)未调整

空中控制(在空中水平方向上移动玩家的能力)在现实世界根本不可能。但是在视频游戏中,现实行为并不总是有趣的,对于有跳跃挑战的平台游戏,你可能需要一些空中控制。(译注:当然,有些复古硬核,比较早期的 FC 平台的恶魔城,就可以让你体会在空中无法控制角色的感受,呃,游戏体验因人而异吧~)

如果必须仔细调整地面上的加速度参数,那么对于空中加速度来说更是如此(因为玩家正在下落并且没有全世界的所有时间做出反应):

  • 太低的空中加速度不会让玩家有机会在空中纠正他的轨迹,他会有一种“沉重”的感觉。
  • 太快的空中加速度对于玩家来说是很难度量和把握的

而且,很明显,低空中加速度会使高重力值的“重量”感倍增,而较快的空中加速度会让低重力的“浮动”感倍增。

因此,应该考虑把重力和空中加速度一起进行调整。

但是,要注意不要总是用较高的空中控制来“补偿”高重力,反之亦然,有时最好保持 2 个值之间的一致性。不要忘记“极端”的值可以给游戏带来强大的辨识度:

非模拟跳跃

即使在现代和 AAA 游戏中,非模拟跳跃解决方案,即只有一个没有任何调制可能性的跳跃高度,也是经常出现的。首先,让我们来弄清楚,我称之为模拟跳跃机制和非模拟跳跃机制之间的区别是什么:


在有些游戏中,比如刺客信条或者 GTA 系列,非模拟跳跃并不是什么问题,因为这些游戏并不专注于跳跃挑战,并且游戏本身希望保持一种真实感。然而,在那些“以跳跃为核心”的游戏(比如:Super meat boy、Mario、Sonic 还有最近的 Celeste)中,如果玩家能够自己通过操作来控制跳跃,尤其是在空中,那就会帮助他们成功完成一些特定的挑战(比如在尖刺的天花板下跳跃)。此外,它有助于提升玩家对反应控制的感受。

实现模拟机制可能有点棘手。我作为设计师的解决方案直接受到 Sonic 中使用的解决方案的启发(感谢 Sonic Physics 指南中的“跳跃速度”部分):假设你使用冲力速度跳跃(让角色逐步退回,同时采取行动重力),想法是定义一个“削减跳跃速度限制”,并且,如果当玩家释放输入时垂直速度高于此限制,则将垂直速度设置为等于限制。如果速度低于此值,则表示角色足够接近后退,并且不必“直接”降低跳跃速度。

当然,你需要一些尝试来找到“削减跳跃速度限制”的参数值。由于这个值与你的重力有关,对我来说,“gravity / 10”的值效果很好:

cutJumpSpeedLimit = gravity / 10
If isJumping and jumpInputReleased and verticalSpeed > cutjumpSpeed
        verticalSpeed = cutJumpSpeed

缺乏跳跃输入容差

当然,你希望你的角色只有在他站在地上时才能够跳跃。但如果你严格使用这种情况,你可能会遇到一些缺乏反应性的感受。实际上,如果玩家在角色接触地面之前要求跳几帧(并且通常是真的,因为人脑往往会预期过多的动作),呼叫将不会被考虑(译注:有些手残玩家的按键反应速度较慢,这种情况也要考虑进去,否则,则会埋怨游戏开发者。)。同样地,如果玩家想要在角色到达平台末端时跳跃,那么当角色刚刚开始下落时,他可能反应太晚几帧(译注:国外开发者所说的 Coyote Time 出场了 - 土狼时间)。请看下面:

玩家的感知可以让他认为他能够跳跃,即使从技术上来说实际并不能跳。

为了避免这种看法,解决方案是添加“容差”,这意味着:

  • 当玩家给出输入并且角色足够接近地面时,会记录跳跃输入。所以,当角色触地时,他会再次跳起来

  • 当角色从平台上掉下来时,如果玩家给出输入,在空中有个延迟时间,让玩家可以在空中跳跃:

跳跃时没有能力

当你按下按键在屏幕上立即出现结果时,会出现“高反应性”的感觉。是的,看起来很明显但是,在玩 Skylanders Swap Force 时,我很惊讶在我跳跃时无法攻击:没有动画或声音反馈,角色在空中时对攻击按钮没有响应。

在平台游戏中,跳跃是你的主要能力和移动方式,你会经常使用它。因此,在跳跃时禁止任何其他能力必须经过仔细考虑。特别是如果在行动阶段需要这种能力(比如基于混战的游戏中的攻击能力)!(译注:跳起来不能攻击的,没有其他行为的话,那可真是无聊透了……想想,人家 Downwell,能跳能踩能用鞋开枪呢~ 同样是游戏,差距咋恁么大呢~)

如果你真的想要出于任何好的理由禁止空中动作,那么就用一些声音,特效或动画反馈来弥补吧,总比干巴巴的跳要好。(译注:想想 Metroid,跳起来变球型翻滚,又省了动画制作成本,还可以攻击敌人,还有声音,后来还能升级能力,多段跳多段攻击还带特效带声音,用乔杉话儿说:那不得起飞喽啊~)

圆形平台边缘(光滑边缘)

我做的一些游戏,所有平台都有圆边。有很多理由这样做,但一个常见的原因是避免角色“胶囊”碰撞体卡在直角边缘:
(译注:胶囊是 unity3d 的一种碰撞体,如果你玩儿 GMS,那就略过吧~)

许多游戏引擎,如 Unity 3D,使用这种“胶囊”碰撞体通过物理引擎来处理碰撞。因此,使用这种简单快速的解决方案来避免“卡住”问题而不是处理直角边缘非常诱人。

实际上,它不一定是一个糟糕的解决方案:如果你的游戏不是基于跳跃挑战而且不需要高精度移动,那么它可能没问题。但是,如果你想做像 Mario 那样的跳跃,你应该避免圆形边缘:玩家到达边缘的平台感觉非常令人沮丧,感觉他碰到了平台地面,最后滑进了由于几乎看不见的圆形边缘……

如果您对编码感兴趣,我在“爱好者编码器”系列中写了一篇关于在 Unity 3D 中编写自定义2D 平台控制器的方法的文章,特别是为了避免这种问题。

视觉和声音反馈

是的,反馈非常非常重要。是的,有时甚至在原型过程中。

我意识到平台游戏中的反馈对于个人项目的重要性:即使应用了上述所有其他“规则”,我仍然发现游戏手感不够好。我试图调整变量,修改移动系统等......没有任何改变。最后我厌倦了搜索并决定开始编写一个声音管理器来“放松”一下自己,我加入测试它的第一个声音就是跳跃声。我发现自己的角色更具反应性,我感到很惊讶!我决定继续这种方式并实现与角色速度相关的运行动画速度:游戏似乎再次获得更多反应!
(译注:著名表演艺术家李雪健大爷在画外说:“没声音~ 再好的戏也出不来!”)

这个小故事只是说,有时候,即使你知道动画,声音或 FX 会在开发的后期出现,大脑也需要它们帮助它“实现”一些物理概念,如速度,移动或重力。而且因为平台游戏都是关于特定物理的理解,我认为在尝试调整移动变量之前尽早实施占位图反馈非常重要。
(译注:Gun Point 的开发者 Tom Francis 也在博客中说过,觉得你的原型没意思?不好玩?加上一些动画、音效再看看,别那么早放弃它。这里并不是让你去花大量的时间去制作美术资产,只是给原型稍微抛抛光,提提色,花不了太多时间,但是很大的可能会给你带来更好的效果,而且有时候是意外的灵感。对你完成原型也有很大的帮助,是种视觉听觉上的鼓舞。)

结论

当然,这个列表并非详尽无遗,我真的很想知道其他人对平台游戏操作的观点。

这个列表也是主观的,这就是为什么我在文中写了很多“我的看法”,在我看来“和”大部分时间“:游戏设计中没有什么是一成不变的。游戏设计师的工作并不是真正的“理论”,这就是为什么写这篇文章非常棘手。在我看来(再次!),游戏设计师的工作中心首先是原型创意,测试它们,原型,测试等,直到他最终得到“有趣”的东西。


最后,我的游戏设计黄金法则:就是没有黄金法则!


最后,感谢一些非常有趣的文章,这些文章激励我写下这篇文章:

(译注:略长,比之前那篇操作缓冲的讲的更多。希望能帮到同样在做平台游戏的朋友)

本文为用户投稿,不代表 indienova 观点。

近期点赞的会员

 分享这篇文章

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. 黑轮酱 2018-11-29

    感谢翻译,上次译文看到提到了这篇文章来着!

  2. π 2018-11-29

    感谢
    译者注写的真好真有趣

  3. anlideer 2018-11-29

    感谢~最近正在想手感的问题就看到这篇啦~

  4. 『 』 2018-11-30

    赞美译者

    非常有用的一篇文章

您需要登录或者注册后才能发表评论

登录/注册