Q:UnityにてゲームオブジェクトAとBがあった時、AのAwakeの終了を待たずに、BのStartは実行される。○か×か?
A:×
下記、記事で簡易的な検証実施https://t.co/RMX6myj077#Unity #ゲーム制作— キタノ (@yotorie_kitano) April 26, 2025
という話です。
一つのオブジェクト単位で見ると、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」に割り当てて実行します。
結果、下記のログが残ります。
このようにStartは全てのオブジェクトのAwakeのreturn後に動くのでした。
と言ってもスクリプトを見て分かる通り、超簡単な同期処理的なAwake処理なので、非同期なメソッドがある場合はちゃんと設計しましょう。