开发笔记手感战斗

到底是什么让游戏里的一拳打起来像一拳

一记打中却只是把敌人删掉的攻击并不过瘾。这是 Riot Line 改成的做法,以及每一块为什么都重要。

作者 GamerX6 分钟阅读
到底是什么让游戏里的一拳打起来像一拳开始玩 Riot Line

Riot Line 里第一版能跑的拳击做的正是一拳该做的事:在一个短暂的生效窗口内命中,检查目标的车道,如果对上了,就移除这个敌人。机制上完全正确。手感上什么都没有。一个在成功命中时干脆消失的敌人,和一个因为别的任何原因而消失的敌人毫无区别,而一款「打中东西却毫无感觉」的防守游戏,就是一款没人想继续玩的防守游戏。

四个小效果,叠在同一个瞬间上

修好它的每一样东西,单看都不复杂。真正关键的是让这四样落在完全相同的一瞬——命中被记录的那一帧:

  • 顿帧。 撞上的那一刻整个游戏冻结几分之一秒。听起来像是会显得卡;实际上它被读成了重量,正是格斗游戏用了几十年的同一招。
  • 击退。 敌人不是就地消失,而是带着真实的速度向后向上飞出去,飞的过程中旋转,并在剩下的滞空时间里缩小,而不是「啪」的一下脱离存在。
  • 镜头一顶加抖动。 每一次命中都伴随一次短促锐利的镜头踢动,小到不会在混战中让你迷失方向,却又存在到即使用余光你的眼睛也会记录下这次撞击。
  • 一簇粒子。 接触点上快速迸出一小把明亮的光点,半秒内消失。渲染起来很便宜,却在推销「这里发生了什么」这件事上出了惊人多的力。

同样这四个效果,也用在你没打中的那一拳上

游戏早期版本还有第二个更安静的 bug,值得一提:一个没被惩罚就突破防线的敌人,之后会保持在半步之间的姿态,永远停在那儿。原来突破的代码把敌人设成了「正在死亡」,却从没告诉它这个死亡该持续多久,于是清理检查一直在和一个从未被赋值的数比较,也就从未触发。敌人不是被设计成原地冻结,它只是无处可去。真正的修复复用了与命中拳击相同的抛飞与淡出物理,只是朝前而不是朝后,因为突破是敌人挤过去,而不是被打飞。挨打和突破,两者都需要落到一个真实的物理瞬间上,否则两者都显得无关紧要。

👊这条教训可以推广到这一款游戏之外:成功的奖励和失败的后果,应该得到同等的制作投入。一款只投资于庆祝胜利的游戏,最后会得到一堆感觉像 bug 而不像结果的失败。

继续阅读