游戏中过渡动画切换的常见形式

过渡动画指的是,当游戏中的某个东西(可能是UI控件,也可能是游戏世界中的物体)从一个状态变化为另一个状态时,是需要过渡的,比如一个人从静止到跑动,需要一个迈出步子的动画,才能顺利地从走的状态过渡到跑的状态;或者比如一个按钮,从一般状态到被点下,如果这是一个需要做的十分华丽的按钮,按钮也会有一个从一般状态到被点下过渡的动画。理论上来说,一个制作精良的写实风格的游戏,绝大多数状态的迁移都是需要过渡的,只有某些不需要过渡的地方才会特殊处理,状态过渡应该是一个常态,因为这符合玩家对世界的认知,能够让物体看起来很真实。

然而,这个过程的加入却使得状态迁移变的更为复杂。比如说,玩家控制他的角色从静止开始跑动,这时人物开始播放“迈出步子”的过渡动画,而在这时玩家如果命令角色停止移动,角色的动画应该如何处理?本文就是来讨论几种常见的处理状态过渡切换的方式的。

过渡动画本身是否应该当做一个状态处理,要和程序员进行商量,一同进行设计。

1,有始有终

有始有终的处理方式就是,一旦开始进入过渡动画,任何事情都无法阻止这个物体完成其状态的过渡,这个物体不接受玩家下达的任何指令,或者玩家下达的指令等到过渡动画完成后才会被执行。

游戏中场景的切换经常会用到这种方式,比如玩家从一个全屏窗口进入到了另外一个全屏窗口,新的全屏窗口在播放登场的过渡动画时候,窗体内的所有控件都不会响应玩家的操作,直到过渡动画播放完成。《炉石传说》中从主菜单进入任何一个模式采用的就是这种做法,即便玩家能眼疾手快地在模式弹出动画尚未完成前就点击到由于过渡动画而运动中的按钮,按钮也不会响应玩家的操作。玩家把鼠标悬停在法力水晶上时,水晶会亮起,移开时水晶会变暗,这两个状态过渡也是这一种类型的,不会由于玩家频繁地将鼠标移入移出而乱闪。由于法力水晶是无法进行交互的对象,因此这种处理方式也没有问题。

格斗游戏中人物的状态迁移也会给人以有始有终的感觉,即玩家一旦执行了某个动作,在这个动作执行完毕或被打断之前,角色处于失控状态,不会接受玩家下达的任何指令。不过这种做法不适合绝大多数游戏中的角色状态迁移,因为这会让角色变得相当难以操作。

2,有来有回

当物体由状态A迁移至状态B,在播放过渡动画时,又要从状态B迁移回状态A,有一种很适合的做法是直接停止当前过渡动画,并且反向播放,倒退回状态A。它保证了物体运动的连续性,在过渡动画的任何时刻玩家下达指令,物体都能流畅地倒退回原本的状态。

这种做法非常适合只有两个状态进行来回迁移的物体,比如一个浮出窗口的打开和关闭,一个按钮的亮起和暗掉等等。

3,立刻完成

立刻完成指的是,如果在过渡动画的状态下玩家下达了其他指令,那么就立刻完成过渡动画的播放,从过渡动画播放完成的状态开始执行玩家的指令。这种做法适合于某些情况下的多种状态迁移,由状态A迁移至B,然后又迁移至C。

比如,玩家将鼠标悬停至某个按钮上时,按钮在播放从一般状态到悬停状态的过渡动画,而此时玩家如果点击了按钮,就立刻完成过渡动画,从悬停状态开始播放按下按钮的过渡动画。

但是这种做法会使动作的连续性遭到破坏,因此不适用于持续时间较长的过渡动画。

4,加速完成

加速完成指的是当某个物体处于由状态A至状态B的过渡动画过程中,玩家又下令让物体迁移至状态C时,则加速完成过渡动画A至B,并且加速后的过渡动画处于“有始有终”的状态,在播放完成后立刻执行迁移至状态C的指令。考虑到人类的反应速度,如果加速后的过渡动画在0.1秒内完成,指令延迟还是在可接受的范围内的,但这0.1秒的加速过渡动画,有和没有在体验上却是天壤之别。我们用指令的轻微延迟为代价,换取了状态切换的连续性。

比如,玩家的角色一开始坐在地上(状态A),玩家命令其站起(状态B),这时开始播放站起来的过渡动画(A至B),此时玩家又命令角色移动(状态C),站起来的过渡动画(A至B)被加速到0.1秒内完成,即角色更快速地站了起来,站起来后角色开始播放由站立到移动状态的过渡动画(B至C)。

如果在站起来的0.1秒内(加速的A至B)玩家又下达了跳的指令(状态D),假如我们采用“有始有终”的做法,那么这个指令要等待0.1秒的过渡动画(加速的A至B)完成后,才开始,即播放由站起来到跳起的过渡动画(B至D)——也就是说,玩家原本的由站立到跑动(B至C)的指令被覆盖了,替换成了由站立到跳起(B至D)。更进一步,假如在这0.1秒内玩家下达了无数个导致状态迁移的指令,除了最后一个以外的指令全部都会被覆盖,最终只执行最后下达的指令,并开始播放过渡动画。

另一个做法是,加速后的动画再次接受指令时,不用“有始有终”的做法,而用“立刻完成”的做法。

接着用刚才的例子,如果玩家的角色在站起来的0.1秒内(加速的A至B),玩家又下大了跳的指令(状态D),那么由坐到站的动画(加速的A至B)会立刻结束,开始播放由跑至跳的动画(C至D)。这体验很怪,因为玩家会发现自己的角色还没有完全站起来,却突然开始播放由跑进入跳的状态了。

这种做法牺牲了一定的连续性,而最大程度上保证了玩家操作的即时性,在对即时计算要求较高的游戏如动作游戏中,这种做法更适合,而如果是RPG则第一种做法更合适。我猜测《魔兽世界》就是采用的第一种做法,虽然我并不知道他们的角色状态是如何控制的。而采用第二种做法的游戏并不常见,因为这种做法比较麻烦,注重即时操作的游戏往往都只采用“有始有终”或“立刻完成”的做法了,要么就得动画全播完,要么就是播到一半就能强制转换状态(比如《拳皇》的SUPER CANCEL机制),很少采用“加速完成”与“立刻完成”相混搭的做法。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s