【Unity】狙った順に処理したい時はスクリプトの実行順を指定する
MonoBehaviourを継承したスクリプトはゲームオブジェクトにアタッチできます。この時、スクリプトの処理を行なう順番を指定したい時に便利なテクニックです。
Start()、Update()などのイベント関数がどのフレームで呼ばれるかはUnity側で決まっていますが、異なるスクリプト間で、どのスクリプトのStart()が先に呼ばれるかまでは決まっていません。
Start()が存在するA, B, Cのスクリプトで、最初のフレームになった時に呼ばれるのはA->B->Cの順番なのか、B->A->Cの順番なのか、といった部分はデフォルトだと決まっていないんです。
そこで役立つのが今回紹介するスクリプトの実行順序の設定です。
順番を指定できるのはMonoBehaviourを継承しているスクリプトという制限はあるものの、順番指定ができるのはありがたいです。
環境
macOS 10.13 High Sierra
Unity2018.1.0f2
Script Execution Order Setting
正式名称で書くとごつい英語ですが、読んで字のごとく、Unityではスクリプトの実行順序の設定を行なうことができます。
Unityのマニュアルにもちゃんと記載されているので、詳細についてはそちらもご覧あれ。
『Script Execution Order』ウィンドウを開くには、[Edit] -> [Project Settings] -> [Script Execution Order]を選択します。
『Script Execution Order』ウィンドウでの設定はシンプルで、[+]を押して表示されたスクリプト一覧から、順番指定したいスクリプトを実行したい順に並べるだけ。もちろん、全てのスクリプトを指定する必要はありません。
例としてプロジェクト内にあったスクリプトを適当に追加してみました。並べ替えはドラッグ&ドロップでできます。
真ん中にある『Default Time』が基準で、それより早く処理を行いたいならその上に、遅く処理を行いたいならその下に移動させます。
スクリプト名の右にある数字は実行順を表したもので、少ない数字から実行されます。この数字はUnity側で割り振ってくれるので、私たちは順番だけ決めればOK。
ここで指定しなかったスクリプトは『Default Time』内で実行されます。この時、順番の保証はありません。
具体的にやってみよう
動きを確認するため、以下のようなオブジェクトを用意しました。
左からオブジェクト名が『Cyan』、『Yellow』、『Magenta』となっています。
このオブジェクトに、以下のスクリプトをアタッチします。スクリプトの名前はオブジェクト名と対応しています。
スクリプト内でやっていることは単純で、Start()でメッセージ出力、Update()ではゲーム開始後5フレーム目にRigidbodyをアタッチしています。
ここで出力されるメッセージの順番で、スクリプトが呼ばれた順番が分かります。
順番指定なし
まずはそのまま実行してみましょ。
結果は『Magenta』->『Yellow』->『Cyan』の順でした。
『Hierarchy』ウィンドウでは以下の順で並んでいるけど、この辺は関係なさそう。デフォルトだとどんな順番になるか分からないのが怖いところ。
順番を決めてみる
次は順番を指定して実行します。上の方で紹介した『Script Execution Order』ウィンドウを開いて、スクリプトの実行順を指定します。
『Cyan』->『Magenta』->『Yellow』の順番でコンソールにメッセージが出力されればOKです。
実行するとこうなりました。
ちゃんと指定した通り、『Cyan』->『Magenta』->『Yellow』の順番ですね。蒼のセリフが一番先に出力されています。
念のため別の順序も指定します。今度は『Yellow』->『Cyan』->『Magenta』の順番になるはず。
実行結果は以下の通り。
『Yellow』->『Cyan』->『Magenta』の順番になっています。よかったよかった。
念のためそれぞれ10回ずつ実行していますが、ブレはなさそうでした。
まとめ
他のスクリプトのStart()より早いタイミングでオブジェクトをしたり、各Update()の最後に処理をさせたい時に便利なスクリプトの実行順序指定。
処理を行なうイベント関数を変える方法の他に、同じイベント関数内で順番を指定する時に設定しておくといいかも。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】Colliderを使って爆発的なぶっ飛び力を得る実験 2018.05.26
-
次の記事
【Unity】Sphere Colliderのパラメータを紹介。拡大・縮小で調整しましょ 2018.05.28
コメントを書く