UnityのTransitionでHasExitTimeの意味を勘違いしていた
Unityでアニメーションの設定をしている時に変にハマってしまった。
アニメーションの切り替えを行うTransitionの設定に、「Has Exit Time」という項目がある。デフォルトではチェックがついているのだけども。これを外したことでアニメーションの再生がおかしくなった。今まではキレイに切り替わっていたのに、次のステートに移らなくなってしまったのだ。
実装していたアニメーションは、ウィンドウが画面外部からにょきっと表れるアニメーションだった。画面内のボタンを押したらウィンドウが表れる、ウィンドウ内のボタンを押したらまた画面外に戻っていく。そんなUIである。これをMecanimを使って実装していた。
しかしUIの切り替えアニメーションを行うのに、なぜかスムーズに再生されなかった。微妙な間を置いてからウィンドウが動くのである。
なぜそんなことになっているのか。その原因を調べていたらTransitionの設定で、Exit Timeをゼロにしていなかったせいだと判明した。前のステートの再生時間分待ってから次のステートのアニメーションが再生されるようになっていたからだ。
このTransitionのSettingは、前のアニメーションと次のアニメーションをブレンドして、スムーズに切り替わっているように見せるための仕組みだ。3Dモデルのアニメーションだと、前のステートと次のステートの間をうまいこと補完してキレイに間を繋ぐ役割があるらしいのだけど、2DのアニメーションやUIのアニメーションではそんなブレンドは必要ない。だからここをゼロに変更するようにした(元々は1に設定していた)。
Exit Timeをゼロにすることで、UIの切り替えアニメーションがすぐ動くようになった。しかしExit TimeをゼロにしたのにHas Exit Timeが有効というのはおかしい気がして、ついでにHas Exit Timeのチェックを外してしまった。これが失敗だった。
これは用意したアニメーションの遷移に、再生が終わったら次のステートに移るという部分が一部あったせいだった。Has Exit Timeのチェックが外されたせいで、再生が終わっても次のステートに移らない部分が生まれてしまったわけである。
まあこの間違いに気づけたおかげで、今日もまた1つUnityのことが分かった気がする。