MRが楽しい

MRやVRについて学習したことを書き残す

UnityでAwake/Start同士のイベントの実行順序を変更する

本日は 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 !!!");
    }
}

これらのスクリプトをゲームオブジェクトにアタッチしました。
f:id:bluebirdofoz:20200902223730j:plain
f:id:bluebirdofoz:20200902223743j:plain
f:id:bluebirdofoz:20200902223754j:plain

この状態で試しにエディターを再生してみたところ、以下の順でログが表示されました。
f:id:bluebirdofoz:20200902223805j:plain

スクリプト実行順の設定

スクリプト実行順を指定して、ログを One -> Two -> Three の順で再生されるよう設定してみます。
メニューから Edit -> Project Settings.. を選択して、Project Settings ウィンドウを開きます。
f:id:bluebirdofoz:20200902223816j:plain

[Script Execution Order]タブを開き、[+]ボタンをクリックします。
f:id:bluebirdofoz:20200902223826j:plain

実行タイミングを指定したいスクリプトを選択して追加します。
f:id:bluebirdofoz:20200902223839j:plain

追加されたスクリプトのIDを変更して実行順序を指定します。
番号が低い順からスクリプトが実行されます。また、リストに追加していないスクリプトは[DefaultTime]の位置で実行されます。
[Apply]をクリックして反映します。
f:id:bluebirdofoz:20200902223849j:plain

これで改めてシーンを再生しています。
設定通り、ログが One -> Two -> Three の順で再生されました。
f:id:bluebirdofoz:20200902223859j:plain