Version: Unity 6.0 (6000.0)
言語 : 日本語
Script execution order
イベント関数の実行順序

イベント関数

イベント関数は、すべての MonoBehaviour スクリプトコンポーネントが受信できる事前定義されたコールバックのセットです。コールバックは、以下のようなさまざまな Unity エディターおよびエンジンのイベントによってトリガーされます。

MonoBehaviour の派生クラスに適切なメソッドシグネチャを実装し、ゲームオブジェクトがソースイベントに反応できるようにします。

使用可能なコールバックの完全なリストについては、MonoBehaviour スクリプティング API リファレンスのページを参照してください。メッセージ にリストされています。このセクションの残りの部分では、イベント関数の主要なグループの概要を説明します。

定期更新イベント

ゲームはアニメーションに似ていますが、その場でアニメーションフレームが生成されます。ゲームプログラミングにおける重要な概念は、各フレームがレンダリングされる直前にオブジェクトの位置、状態、動作を変更するということです。Update 関数は、Unity でこのようなコードのために使用される主な場所です。Update は、フレームがレンダリングされる前と、アニメーションが計算される前に呼び出されます。

void Update() {
    float distance = speed * Time.deltaTime * Input.GetAxis("Horizontal");
    transform.Translate(Vector3.right * distance);
}

物理演算エンジンもフレームレンダリングと同様に、離散的な時間ステップで更新を行います。物理演算の更新の直前に別のイベント関数である FixedUpdate が呼び出されます。物理演算の更新とフレームの更新は同じ頻度では発生しないので、物理コードを Update 関数ではなく FixedUpdate 関数に配置することでより正確な結果が得られます。

void FixedUpdate() {
    Vector3 force = transform.forward * driveForce * Input.GetAxis("Vertical");
    rigidbody.AddForce(force);
}

UpdateFixedUpdate がシーン上のすべてのオブジェクトに対して呼び出され、すべてのアニメーションが計算された後、追加変更ができると便利な場合があります。このシナリオには以下のような例があります。

  • カメラをターゲットオブジェクトに向け続ける必要がある場合。カメラの向きの調整は、ターゲットオブジェクトが移動した後に行う必要があります。
  • スクリプトコードがアニメーションの効果をオーバーライドする場合。例えば、キャラクターの頭の向きがシーン内のターゲットオブジェクトのほうを見ているようにします。

このような状況では、LateUpdate 関数が使用できます。

void LateUpdate() {
    Camera.main.transform.LookAt(target.transform);
}

初期化イベント

ゲームプレイ中の更新の前に、初期化コードを呼び出しできると便利です。Start 関数はオブジェクトの最初のフレームまたは物理演算の更新の前に呼び出されます。Awake 関数はシーンのロード時にシーンの各オブジェクトで呼び出されます。さまざまなオブジェクトの StartAwake 関数が任意の順番で呼び出されますが、すべての Awake 関数のインスタンスは最初の Start 呼び出しより前に完了します。つまり Start 関数のコードは Awake フェーズで行われた初期化の結果を活用することができます。

GUI イベント

Unity には、シーンの主なアクションの GUI コントロールをレンダリングし、コントロールに対するクリックに反応するためのシステムがあります。このコードは通常のフレーム更新とは別にハンドルされるため、定期的に呼び出される OnGUI 関数に配置します。

void OnGUI() {
    GUI.Label(labelRect, "Game Over");
}

また、シーンに表示されているゲームオブジェクトに対するマウスイベントを検知できます。これは武器で狙いを定めたり現在マウスポインターの下にあるキャラクターに関する情報を表示したりするのに使用できます。プレフィックス OnMouse (OnMouseOverOnMouseDown など) を持つ一連のイベント関数により、スクリプトはマウスによるユーザーアクションに反応できます。例えば、特定のオブジェクト上でマウスボタンが押されたときに、オブジェクトのスクリプトに OnMouseDown 関数があると呼び出されます。

物理挙動イベント

物理演算エンジンは、オブジェクトのスクリプトでイベント関数を呼び出すことによって、そのオブジェクトに対する衝突をレポートします。OnCollisionEnterOnCollisionStayOnCollisionExit 関数は、接触の発生時、接触の継続中、接触の終了時に呼び出されます。対応する OnTriggerEnterOnTriggerStayOnTriggerExit 関数は、オブジェクトのコライダーがトリガー (物理的に反応するのではなく、何かが侵入したときに検出のみを行うコライダー) として設定されているときに呼び出されます。物理演算の更新中に複数の接触が検出された場合、これらの関数が連続して複数回呼び出されることがあります。そのため、衝突の詳細 (位置、衝突するオブジェクトの ID など) を示すパラメーターが関数に渡されます。

void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.tag == "Arrow") {
        ApplyDamage(10);
    }
}

追加リソース

Script execution order
イベント関数の実行順序