ジャンプ処理と接地判定処理の順序を指定するため、ScriptExecutionOrder を設定してみました。


経緯

制作中のゲームで、いつからかプレイヤーキャラクターがジャンプモーションに切り替わらなくなっていて、その原因を探りました。

あれこれ検討した結果、いつからか以下の2つの処理の順序が入れ替わっているのではと推測。

(A) 地面に近づいたら Animator の Jump パラメーターの値を false にする(着地)
(B) ジャンプボタンを押したら Animator の Jump パラメーターの値を true にする(ジャンプ)

A → B の順に処理されれば問題なさそうですが、B → A の順だと、ジャンプ処理の直後、まだ十分に地面から離れていないタイミングで接地チェックされてしまうので、ジャンプモーションに移らないのでは、と。

Unity では、(明示的に指定しない限り)どの MonoBehaviour のStart メソッドや Update メソッドが先に実行されるか決まっていません。

そのため、自分では「何もしていない」つもりでも、オブジェクトやスクリプトをあれこれいじり回しているうちに、処理の順番が変わってしまったのかも。


設定

設定自体はかんたん。

Edit > Project Settings > Script Execution Order に実行順序を指定したいスクリプトをセットするだけ。

スクリーンショット (1015)

数字が小さいほうが先に処理されるようです。

今回は PronamaJump スクリプトで接地判定を行っていて、PronamaInput スクリプトでキー入力を受け取ってジャンプ処理を呼び出しているので、上図のようにセットしました。

これで問題なく動くようになりました。また、この2つのスクリプトの順序を入れ替えると、問題が再現しました。
ということで、おそらく、うまく処置できたのだと思います。


今回は以上です。