今回は小さなTipsです。
例えば上のように「どれか一つのUI状態を持つ」UIをAnimationControllerで管理し、かつAnyStateから呼び出すように作成した際、Triggerを叩くと何度もUI表示アニメーションが再生されてしまうといった事があります。
AnyStateの先へは何処からでも行ける
下Gifでは、UIの切替にAnyStateを使用してみましたが、ShowItem1が呼ばれる度にアイテムを表示するアニメーションが再生されてしまいます。
これはAnyStateの先に登録しているため、既にアニメーションが再生していた場合でもAnyStateへ戻り再度アニメーションを再生してしまう為です。
Can Transition To Self
そんな時は、Transition(矢印)の設定にあるCan Transition To Selfのチェックを外します。これで、自身に遷移するアニメーションは無視されるようになります。
Triggerは使われないと消えない
この手法には一つ穴があります。それはTriggerはConditionの判定に使用された時に初めてチェックが外れるという仕様です。
例えばTriggerで次のステップへ移動する処理を作成しますが、Step2のみ時間移動とします。そうすると、Step2でTriggerが呼ばれてしまうと、Step3に移動した瞬間ステートを切り替えてしまいます。
その為、Trigger実行中に他のステートに切り替えようとすると、一瞬別のステートに行きますがTriggerが再度判定されステートが戻ってくるといった事になります。
ステート切替時にTriggerを消す
場当たり的な対処となりますが、ステート切替時にTriggerを消すと、この問題を回避出来ます。要するにStatemacihneBehaviourのOnStateExitのタイミングでTriggerを初期化すれば良いのです。
まぁ、ここまでしてAnyStateを使いたいかと言われると微妙な気もしなくもないですが…