Controllerで即座に遷移できなかったら無効になるトリガーを作る方法をまとめました。Controllerでは状態遷移の条件にトリガーを使うことができます。今これを使って、待機状態からJumpトリガーでJumpステートに遷移するステートマシンを考えます。ここで問題になるのが「トリガーを有効化するとそのトリガーを使って遷移が行われたタイミングで無効になる」という性質です。この性質により、Jump状態中にJumpトリガーが設定されると、Jump状態の終了を待ってからまたJump状態に入ってしまいます。この挙動は望ましい場合もありますが、多くの場合望ましくありません。トリガーを設定した時点ですぐに遷移できなかったら、トリガーを無効にしてほしいところです。そこでこの記事では、即座に遷移できなかった場合に無効になるトリガーの仕組みを作成します。遷移できなかったらトリガーを無効にするこれを実現するにはMonoBehaviour.OnAnimatorMove()にトリガーのリセット処理を書きます。}}MonoBehaviour.OnAnimatorMove()はステートマシンやアニメーションが評価された後に呼ばれるイベント関数です。docs.unity3d.comこれにより、次回ステートマシンが評価された後に強制的にトリガーが無効化されます。拡張メソッドで実現する前節の方法はLateUpdateでトリガーがセットされることも考慮した実装になっていますが、Updateでしかトリガーをセットしない制約を設けるのであれば拡張メソッドでもっと手軽に使える実装ができます。}}使う側は以下のように書くだけです。"Jump");上記の実装ではメソッド実行時にトリガーをセットし、次回のUpdate後にこのトリガーをリセットします。イベント関数の実行順を見ればわかるように、もしLateUpdateでこのメソッドを実行した場合にはステートマシンによる状態遷移が評価される前にトリガーがリセットされてしまいます。個人的にはトリガーのセットはUpdateで行うという制約を設けたうえでこの拡張メソッドを使うのは良い手だと思います。UniRxを使ってさらに簡潔にさらにUniRxを使えば引数のMonoBehaviourすら渡す必要がなくなり、SetTrigger()と同じ感覚で使えるようになります。}}使う側はこんな感じです。_animator.SetTriggerOneFrame("Jump");このくらいまでやっておけば使いやすそうです。1はてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。