📲
【Unity】イベント関数の実行順序 まとめ
Unityでは、様々なイベントが用意されており、処理の実行順序に影響します。
呼び出されるタイミングなど調べる機会があったので、Unityのイベント関数についてまとめました。
1 初期化イベント
Awake
- スクリプトがActiveになった時に最初に呼び出される関数です。
- 全てのオブジェクトの
Awake
が実行されてからStart
に進みます。 -
Awake
内では他のオブジェクトの初期化状態に依存しない処理を行う必要があります。
Start
-
Awake
の完了後、スクリプトが最初に有効化されたタイミングで一度だけ実行されます。 -
Awake
が全てのオブジェクトで完了した後、それぞれのStart
が順次呼ばれます。
2 更新イベント
Update
- 毎フレーム呼び出される。
- 各オブジェクトごとに
Start
が完了後、その次のフレームからUpdate
が開始されます。 - 他のオブジェクトの
Start
が終わるのを待たずに、Update
は個々のオブジェクトで並行して実行されます。
例: 複数のオブジェクトがある場合
ObjectA: Awake
ObjectB: Awake
ObjectA: Start
ObjectA: Update
ObjectB: Start
ObjectB: Update
LateUpdate
-
全てのオブジェクトの
Update
が終了した後に実行。 - 他のオブジェクトの
Update
結果を元にした処理に適しています。 - 例えば、3DモデルがAnimatorで
Update
で計算され、
その位置を基に動かす処理をLateUpdate
で実行する場合があります。
FixedUpdate
- 一定の時間間隔(デフォルトは0.02秒)で呼び出されます。
-
Time.fixedDeltaTime
で指定された一定間隔で実行されるため、フレームレートに依存しません。 - Unityの物理演算は、このTime.fixedDeltaTimeの固定間隔で進行するように設計されているため、フレームレートが速くても遅くても、物理シミュレーションは安定して行われるようになっています。
- FixedUpdateは物理演算が開始されるタイミングで実行されるため、Rigidbodyの操作や物理挙動を扱う処理を記載できます。
- Time.fixedDeltaTimeはProjectSettings>Timeで変更可能です。
3 コルーチンの実行順序
Unityのコルーチンは、Update
の後に実行されます。
コルーチンは時間経過やフレーム数の制御が簡単に行うことがで、様々な待機処理を書くことができます。
待機処理の例
-
yield return null
の場合、次のフレームのUpdate
終了後に再開 -
yield return new WaitForSeconds(2)
の場合、2秒待機 -
yield WaitForFixedUpdate
の場合、次のFixedUpdateの後に再開 -
yield WWW
の場合、リクエストが完了するとコルーチンが再開 -
yield StartCoroutine
呼び出されたコルーチンが完了するのを待機してから、続きが再開
実行順序のまとめ
-
全てのオブジェクトで
Awake
→Start
。 -
各オブジェクトで
Start
が終わると次のフレームでUpdate
開始。 - 更新系のイベント(
Update
→LateUpdate
)。 - FixedUpdateは、Time.fixedDeltaTimeでタイマー管理されている。
- コルーチンは
Update
の後に実行され、様々な待機処理を行える。
Discussion