ゲームを作る上でスローモーションを行いたくなるケースがある。
その場合はUnityでストップやスローモーション・早送りを実現するにはのように、Time.timescaleで時間を停止・加速させてしまうのは手っ取り早い。少なくともAnimationで挙動を制御している場合。
しかし、rigidbody等のような異なる時間軸で動作する物がある場合は一緒にInterpolateを設定しておくことをお勧めする。
まず、普通にボックスsを吹っ飛ばすシーンがあったとする。
これを単純にTime.timeScaleだけで処理すると、以下のようになる。要するにガクガクになる(以下のGIFは60FPSで撮影)。スローで再生しているのだが、ブロックが明らかに飛んでしまう。そこでInterpolateを使用した版。比較すると、スムーズにブロックが吹っ飛んでいるのがわかる。撮影自体は上のGifと同じだが、最後のスローモーション再生から通常再生に戻る所はかなり自然に見えると思う。Interpolateはrigidbody2dにもrigidbodyにもある。ちなみに負荷はコレの比ではないけど、Time.fixedDeltaTimeの値を大幅に減らす(rigidbodyの計算回数を跳ね上げる)場合でも、似たような効果が得られる。こっちは全てのrigidbodyに設定しなくても良いので作るのは楽。
(ただ計算回数を跳ね上げるって事は負荷が超高いって訳で。モバイルとかは逆に減らす方に舵を取ると電池・パフォーマンス面で嬉しい事になるかも)
一週間で1本ゲームを作る #Unity1Weekで思いついたネタ。
とりあえず今は「カブトのクロックアップ・クロックオーバー的な事して光を避ける」感じのゲームを作ってたけど、思ってたより面白く無いので他のゲームを考え中。むむむ