Unity

UnityのAwakeとStartの複数オブジェクト時の実行順

 

という話です。

一つのオブジェクト単位で見ると、UnityのAwakeとStartの実行順番はAwake→Startというのは知っていますよね?

じゃあ、複数のオブジェクトがあるときに、異なるオブジェクトのStartはいつ実行されるのか知ってますか?

簡単に実験した備忘録として残します。

 

【前提】
Unityバージョン:60000.0.23f1

 

UnityのAwakeとStartの複数オブジェクト時の実行順

下記のスクリプトを実行します。

using UnityEngine;

public class Test : MonoBehaviour
{
  public int max = 1000;
  private void Awake()
  {
    Debug.Log("Awake " + this.name);
    for (int i = 0; i < max; i++)
    {
      for (int j = 0; j < max; j++)
      {
      }
    }
    Debug.Log("Awake end " + this.name);
    return;
  }
  void Start()
  {
    Debug.Log("Start " + this.name);
  }
}

 

このスクリプトを2つのオブジェクト「Max10」と「Max200000」に割り当てて実行します。

結果、下記のログが残ります。

UnityのAwakeとStartの複数オブジェクト時の実行順

このようにStartは全てのオブジェクトのAwakeのreturn後に動くのでした。

と言ってもスクリプトを見て分かる通り、超簡単な同期処理的なAwake処理なので、非同期なメソッドがある場合はちゃんと設計しましょう。

 

-Unity