📲

【Unity】イベント関数の実行順序 まとめ

2024/11/30に公開

Unityでは、様々なイベントが用意されており、処理の実行順序に影響します。
呼び出されるタイミングなど調べる機会があったので、Unityのイベント関数についてまとめました。

  1. 初期化イベント
  2. 更新イベント
  3. コルーチンの実行順序
  4. 実行順序のまとめ



公式ドキュメント


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 呼び出されたコルーチンが完了するのを待機してから、続きが再開

実行順序のまとめ

  1. 全てのオブジェクトAwakeStart
  2. 各オブジェクトStartが終わると次のフレームでUpdate開始。
  3. 更新系のイベント(UpdateLateUpdate)。
  4. FixedUpdateは、Time.fixedDeltaTimeでタイマー管理されている。
  5. コルーチンはUpdateの後に実行され、様々な待機処理を行える。

Discussion