Unity Animator/Animation で長時間繰り返すときの注意

Animator/Animation のキャプチャ。

今や TimeLine が実装されている Unity ですが、かつてはそんな便利なものがなく、Animator/Animation で代用していたりしました。 ところが、Animator/Animation を使って演出を時系列に管理するとき、繰り返しの発生時に問題が起こることがあります。

タイムラインの総時間は 1031 秒で、演出の開始時に、つまり Animation のタイムラインの先頭で、別の PC に信号を送っていました。 さらに AutoLoop を有効にし、1031 秒を繰り返すたびに信号を送るようにしていました。

ところが、最初のうちは良いのですが、繰り返すたびに、信号の発生時間がズレていることが分かりました。 FPS の低下なども考えましたが、ログを確認しても、FPS の低下などは確認することができませんでした。

結論から言うと、AutoLoop を無効化し、タイムラインの最後にイベントを追加して、 そのイベントから Animator.PlayInFixedTime(0,0); を実行することで、この問題は解決できそうです。 マニュアルで繰り返させると、常に 1031 秒の時点で信号を送信するようになりました。

このとき注意したいのは、AutoLoop を無効にすることと、Animation の先頭に追加されたイベントは発火しないことです。 0 秒時点に巻き戻るので発火するかなと思いましたが、しませんでした。その直後のイベントは発火します。 この問題は、タイムラインの最初と最後に同じイベントが発火するようにしておけば、解決できそうですね。