ゲーム開発で必ず起こること
ある日、プログラムを書いているとこんなことが起こりました。
「よっしゃ。オブジェクトについてくるスクリプトが書けたぞ!」
で、実行します。
「我ㄉㄊ阿!バグってるぅ~」
オブジェクトは、完全にオブジェクトにぴったりついている訳ではなく、ちょっとずれていることがありました。
こんなプログラムの苦悩、そしてバグは、皆さん一度は経験したことありますよね ((圧
今回のバグでは、スクリプトのUpdate関数
が本来プログラマーの想定している順序と違った順序で実行されていて、バグが発生しているというものです。
これを解決する方法はあるのでしょうか?
今回は、Update関数
を、指定した順番通りに実行する方法を解説します。
本題~Update関数を指定した順番通りに実行する~
まず、Project Settings
を開きます。
開き方は、Edit
> Project Settings
です。
そして、Project Settings
内のScript Execution Order
を開きます。
このScript Execution Order
の中には、画面をリアルにする処理や、UIを更新する処理があらかじめ設定されています。
ここから、順番に実行したいスクリプトを追加していきます。
処理のリストの下にあるボタン+ ▼
をクリックして、順番に実行したいスクリプトを、できれば想定している順番に入れていきます。
私の場合は、SplineSystem.cs
>RearWheel.cs
>TrainTransform.cs
の順番に実行したいので、このような組み合わせにしています。
設定できたら、忘れずにApply
を押しましょう。
数字の意味は?
そういえば、先ほどの画像で、100
や200
のように数字が指定されていましたよね。
これって何なのでしょうか?
公式からの説明を参考にしてみます。
こんなことが書かれていました。
割り当てられた番号は、相対的な順序を表しています。Unity はリストを上から下の順に (大きな負の順序番号のスクリプトから大きな正の順序番号のスクリプトに向かって) 実行します。
つまり、数字が小さく設定されてる処理から大きくなっている処理の順に、処理を実行していることになります。
ただ、こんなことも書かれていました。
順序番号は任意であり、物理的な量を表すものではありません。
ということは、実行したい順に番号指定した場合、0
>100
でも、1
>2
でも処理の実行手順は変わらないことになります。
リスト内の処理をドラックして順序を変更することもできます。
まとめ
今回は、スクリプトのUpdate関数
を指定した順番通りに実行する方法を解説しました。
Script Execution Orderから、実行したい順番にスクリプトを入れてあげると実行できます。
また、この記事に関するヒントを与えてくださったMeredothさんに感謝いたします。
参考サイト①:Can Unity Scripts run the Update mesos in order? - Unity Engine - Unity Discussions
参考サイト②:Script Execution Order - Unityマニュアル
※メゾット
の英訳はMesos
ではなくMethod
です。タイトルは誤字がありますのでご注意ください。