Attributes
Understanding Automatic Memory Management

Order of Execution for Event Functions

Running a Unity script executes a number of event functions in a predetermined order. This page describes those event functions and explains how they fit into the execution sequence.

Script lifecycle overview

The diagram below summarizes how Unity orders and repeats event functions over a script’s lifetime.

For more information about the various event functions, see the following sections:

Script lifecycle flowchart

注意 ブラウザーの中には SVG 画像ファイルをサポートしないものがあります。上の画像が正しく表示されない場合 (テキストが表示されない場合など) は、Google ChromeMozilla Firefox など別のブラウザーをお試しください。

First Scene load

これらの関数は、シーンが始まると (シーン内の各オブジェクトに対して 1 度だけ) 呼び出されます。

  • Awake: この関数は常に Start 関数の前およびプレハブのインスタンス化直後に呼び出されます。(もしゲームオブジェクトがスタートアップ時に無効である場合、有効になるまで Awake は呼び出されません。)
  • OnEnable: (オブジェクトがアクティブな場合にのみ呼び出されます) この関数は、オブジェクトを有効にした直後に呼び出されます。これは、MonoBehaviour インスタンスが作成されるとき (例えば、ステージを起動するときや、スクリプトコンポーネントがアタッチされたゲームオブジェクトをインスタンス化するとき) に発生します。
  • OnLevelWasLoaded: この関数は新しいステージがロードされたことをゲームに通知するために実行されます。

シーンに加えたオブジェクトに関しては、すべて のスクリプトの Awake と OnEnable 関数は、Start、Update などが呼び出される前に呼び出されることに注意してください。当然のことながら、オブジェクトがゲームプレイ中にインスタンス化されるときにこれらを呼び出すことはできません。

Editor

  • Reset: Reset はスクリプトがオブジェクトに最初にアタッチされたときにスクリプトのプロパティーを初期化するために呼び出されます。Reset コマンドを実行した時も同様です。

Before the first frame update

  • Start: スクリプトのインスタンスが有効な場合にのみ、最初のフレームのアップデート前に Start が呼び出されます。

シーンに追加されたオブジェクトの Start 関数はすべてのスクリプトで Update や他の関数が呼び出される前に呼び出されます。当然のことながらオブジェクトがゲームプレイ中にインスタンス化されたときに強制的に呼び出すことはできません。

In between frames

  • OnApplicationPause: ポーズが検知されたフレームの終わりに、実際は、通常のフレームのアップデートの間に呼び出されます。OnApplicationPause が呼び出されてからひとつだけ追加のフレームが作成され、ポーズ状態を示すグラフィックスなどを表示できます。

Update Order

ゲームロジック、インタラクション、アニメーション、カメラ位置などの追跡に、各種イベントを使用できます。共通のパターンは Update 関数内のほとんどのタスクを実行することですが、その他の関数も使用できます。

  • FixedUpdate: FixedUpdate はしばしば、Update よりも頻繁に呼び出されることがあります。フレームレートが低い場合は 1 フレームにつき複数回呼び出されますが、フレームレートが高い場合は複数のフレームの間でも呼び出されないことがあります。すべての物理演算とアップデートは FixedUpdate のすぐ後に発生します。FixedUpdate 内で移動の計算を行う場合は、 Time.deltaTime で値を乗算する必要はありません。なぜなら FixedUpdate は、フレームレートとは関係なく、信頼性のあるタイマーで呼び出されるからです。

  • Update: Update は、 1 フレームにつき 1 度呼び出されます。これは、フレームのアップデートの主となる関数です。

  • LateUpdate: LateUpdateUpdate 終了後に、1 フレームにつき 1 度呼び出されます。Update で実行される計算は、LateUpdate が始まる前にに完了します。LateUpdate の一般的な使用方法は三人称カメラの追跡です。Update 内でキャラクターを動かし、回転させる場合、LateUpdate ですべてのカメラの移動と回転の計算を行えます。これにより、キャラクターが完全に移動してからカメラが追跡することができます。

Animation update loop

These functions and Profiler Markers are called when Unity evaluates the Animation system.

  • OnStateMachineEnter: During the State Machine Update step, this callback is called on the first update frame when a controller’s state machine makes a transition that flows through an Entry state. It is not called for a transition to a StateMachine sub-state.

    This callback occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.

    Note: Adding this callback to a StateMachineBehaviour component disables multithreaded state machine evaluation.

  • OnStateMachineExit: During the State Machine Update step, this callback is called on the last update frame when a controller’s state machine makes a transition that flows through an Exit state. It is not called for a transition to a StateMachine sub-state.

    This callback occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.

    Note: Adding this callback to a StateMachineBehaviour component disables multithreaded state machine evaluation.

  • Fire Animation Events: Calls all animation events from all clips sampled between the time of the last update and the time of the current update.

  • StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit): A layer can have up to 3 active states: current state, interrupted state, and next state. This function is called for each active state with a StateMachineBehaviour component that defines the OnStateEnter, OnStateUpdate, or OnStateExit callback.

    The function is called for the current state first, then the interrupted state, and finally the next state.

    This step occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph..

  • OnAnimatorMove: Every update frame, this is called once for each Animator component to modify the Root Motion.

  • StateMachineBehaviour(OnStateMove): This is called on each active state with a StateMachineBehaviour that defines this callback.

  • OnAnimatorIK: Sets up animation IK. This is called once for each Animator Controller layer with IK pass enabled.

    This event executes only if you are using a Humanoid rig.

  • StateMachineBehaviour(OnStateIK): This is called on each active state with a StateMachineBehaviour component that defines this callback on a layer with IK pass enabled.

  • WriteProperties: Writes all other animated properties to the Scene from the main thread.

Useful profile markers

Some of the animation functions shown in the Script Lifecycle Flowchart are not Event functions that you can call; they are internal functions called when Unity processes your animation.

These functions have Profiler Markers, so you can use the Profiler to see when in the frame Unity calls them. Knowing when Unity calls these functions can help you understand exactly when the Event functions you do call are executed.

For example, suppose you call Animator.Play in the FireAnimationEvents callback. If you know that the FireAnimationEvents callback is fired only after the State Machine Update and Process Graph functions execute, you can anticipate that your animation clip will play on the next frame, and not right away.

  • State Machine Update: All state machines are evaluated at this step in the execution sequence. This step occurs only if there is a controller component (for example, AnimatorController or AnimatorOverrideController or AnimatorControllerPlayable) in the animation graph.

    Note: State machine evaluation is normally multithreaded, but adding certain callbacks (for example OnStateMachineEnter and OnStateMachineExit) disables multithreading. See Animation update loop above for details.

  • ProcessGraph: Evaluates all animation graphs. This includes sampling all animation clips that need to be evaluated, and computing Root Motion.

  • ProcessAnimation: Blends the results of the animation graph.

  • WriteTransforms: Writes all animated transforms to the scene from a worker thread.

    A Humanoid rig with multiple layers that have IK pass enabled can have multiple WriteTransforms passes (See the Script Lifecycle Flowchart.

Rendering

  • OnPreCull: カメラがシーンを間引く前に呼び出されます。カリングにより、カメラにどのオブジェクトを表示するかが決定されます。OnPreCull は、カリングが発生する直前に呼び出されます。
  • OnBecameVisible/OnBecameInvisible: オブジェクトがカメラに対して表示または非表示になる際に呼び出されます。
  • OnWillRenderObject: オブジェクトが表示されると、各カメラに対して 1 回 呼び出されます。
  • OnPreRender: カメラがシーンのレンダリングを開始する前に呼び出されます。
  • OnRenderObject: すべてのシーンレンダリング終了後に呼び出されます。GL クラスまたは Graphics.DrawMeshNow を使用して、この点にカスタムのジオメトリを描画できます。
  • OnPostRender: カメラがシーンのレンダリングを終了した後に呼び出されます。
  • OnRenderImage: シーンのレンダリングが終了した後に呼び出され、画像のポストプロセスを可能にします。詳細は ポストプロセスエフェクト を参照してください。
  • OnGUI: GUI イベントに応じて、フレームごとに複数回呼び出されます。レイアウトおよび再描画イベントが最初に処理され、その後にレイアウトおよびキーボード/マウスイベントが各入力イベントに対して処理されます。
  • OnDrawGizmos 可視化のためにシーンビュー内での Gizmos の描画に使用されます。

Coroutines

一般的にコルーチンのアップデートは、Update 関数の後に実行されます。コルーチンは、所定の YieldInstruction が終了するまで、その実行 (生成) を中止できる関数です。 コルーチンには以下の用法があります。

  • yield: コルーチンは、次のフレームで Update 関数がすべて呼び出された後に続行します。
  • yield WaitForSeconds フレームに対して Update 関数がすべて呼び出された後、指定された時間経過後に続行します。
  • yield WaitForFixedUpdate: すべてのスクリプトで FixedUpdate 呼び出し後に続行します。
  • yield WWW: WWW ダウンロード完了後に続行します。
  • yield StartCoroutine: コルーチンを連鎖し、MyFunc コルーチンが最初に完了するのを待ちます。

When the Object is destroyed

  • OnDestroy: オブジェクトが破棄される直前のフレームのアップデート後に OnDestroy が呼び出されます。(オブジェクトは Object.Destroy あるいはシーン終了時に破棄されます)

When quitting

これらの関数は、シーン内のすべてのアクティブなオブジェクトで呼び出されます。

  • OnApplicationQuit: この関数は、アプリケーション終了前に、すべてのゲームオブジェクトで呼び出されます。エディターでは、ユーザーが再生モードを停止すると呼び出されます。
  • OnDisable: この関数は、動作が無効になると呼び出されます。

Attributes
Understanding Automatic Memory Management