本日は Unity の小ネタ枠です。
UnityでAwake/Start同士のイベントの実行順序を変更する手順を記事にします。
ScriptExecutionOrder
スクリプトの実行順序は Script Execution Order で変更できます。
docs.unity3d.com
サンプルシーン
動作を確認するため、Awake関数でデバッグログ出力を行う3つのスクリプトを作成しました。
・AwakeLogOne.cs
using UnityEngine; public class AwakeLogOne : MonoBehaviour { void Awake() { Debug.Log("!!! Debug One !!!"); } }
・AwakeLogTwo.cs
using UnityEngine; public class AwakeLogTwo : MonoBehaviour { void Awake() { Debug.Log("!!! Debug Two !!!"); } }
・AwakeLogThree.cs
using UnityEngine; public class AwakeLogThree : MonoBehaviour { void Awake() { Debug.Log("!!! Debug Three !!!"); } }
これらのスクリプトをゲームオブジェクトにアタッチしました。
この状態で試しにエディターを再生してみたところ、以下の順でログが表示されました。
スクリプト実行順の設定
スクリプト実行順を指定して、ログを One -> Two -> Three の順で再生されるよう設定してみます。
メニューから Edit -> Project Settings.. を選択して、Project Settings ウィンドウを開きます。
[Script Execution Order]タブを開き、[+]ボタンをクリックします。
実行タイミングを指定したいスクリプトを選択して追加します。
追加されたスクリプトのIDを変更して実行順序を指定します。
番号が低い順からスクリプトが実行されます。また、リストに追加していないスクリプトは[DefaultTime]の位置で実行されます。
[Apply]をクリックして反映します。
これで改めてシーンを再生しています。
設定通り、ログが One -> Two -> Three の順で再生されました。