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

イベント関数の実行順

Unity のスクリプティングには,スクリプトが実行される所定の順番で実行される多くのイベント関数があります。 以下に実行順を記載します。

エディター

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

最初のシーンロード

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

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

シーンに追加されたオブジェクトで 全て のスクリプトは StartやUpdate,その他の関数が呼び出される前にAwakeとOnEnable関数が呼び出されることに注意してください。当然のことながらオブジェクトがゲームプレイ中にインスタンス化された時に強制的に呼び出すことは出来ません。

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

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

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

フレーム間

  • OnApplicationPause: フレームの終わり,ポーズが検知されるとき,通常のフレーム間で,OnApplicationPause が呼び出しされます。OnApplicationPause が呼び出しされてからひとつだけ追加のフレームが発行され,ポーズ状態を示すグラフィックスが表示されます。

アップデート順

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

  • FixedUpdate: FixedUpdate()Update()よりも頻繁に呼び出されることが多くあります。 フレーム レートが低くい場合には,フレームごとに数回呼び出すことができますが,フレーム レートが高い場合は,フレーム間で呼び出すことができません。 FixedUpdate()直後にすべての物理特性の計算とアップデートが発生します。 FixedUpdate()内で移動計算を適用する際,Time.deltaTimeで値を乗算する必要はありません。 これは,フレーム レートとして独立して,FixedUpdate()が信頼できるタイマーで呼び出されます。

  • Update: Updateはフレームごとに一度呼び出されます。 これは,フレームのアップデートに対する主力関数です。

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

レンダリング

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

コルーチン

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

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

オブジェクト破棄時

  • OnDestroy: オブジェクトの生存期間の最後のフレームのフレーム更新の後に OnDestroy が呼び出しされます。 (オブジェクトは Object.Destroy あるいはシーン終了時に破棄されます)

終了時

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

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

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

次の図はスクリプトの有効期間中にイベント関数の順序や繰り返し処理をまとめたものです。

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