Version: 2018.2
属性
自動メモリ管理を理解する

イベント関数の実行順

Unity には、スクリプトが特定の順番で実行されるイベント関数が多くあります。実行順は以下のとおりです。

最初のシーンのロード

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

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

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

エディター

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

最初のフレームのアップデート前

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

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

フレーム間

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

アップデート順

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

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

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

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

レンダリング

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

コルーチン

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

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

オブジェクト破棄時

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

終了時

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

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

スクリプトライフサイクルフローチャート

次の図はスクリプトが実行しているときのイベント関数の順序や繰り返し処理をまとめたものです。

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

属性
自動メモリ管理を理解する