ドキュメント

Unity Engine

Unity Engine

Inspector で設定可能なカスタムイベント

Create your own custom events to configure persistent (lasting between Edit mode and Play mode) callbacks in the Inspector window.
読み終わるまでの所要時間 7 分最終更新 1ヶ月前

Unity は、標準の C# イベントとデリゲート に代わる Unity 固有の方法として UnityEvent API を提供しています。標準の C# イベントに対する Unity イベントの主な利点は、Unity イベントがシリアル化可能である、つまり Inspector ウィンドウ で設定できることです。
UnityEvent
は任意の
MonoBehaviour
に追加でき、標準の C# デリゲートのようにランタイムに実行されます。
UnityEvent
が
MonoBehaviour
で宣言されると Inspector ウィンドウに表示され、編集時からランタイムまで存続するコールバックを定義できます。
UnityEvent には、標準の C# デリゲートと同様の制限があります。
  • ターゲットオブジェクトへの参照を保持し、ターゲットオブジェクトのガベージコレクションを停止します。
  • マネージ (C#)
    UnityEngine.Object
    をターゲットとし、アンマネージ (C++) の対応するオブジェクトが破棄されている場合、コールバックは実行されません。詳細は、Null 参照 を参照してください。

Unity イベントの設定

必要な要件

  • using UnityEngine.Events
    を含む MonoBehaviour スクリプトの作成
  • 1 つ以上の
    UnityEvent
    型フィールドの宣言

Inspector ウィンドウでのコールバック設定

  1. 宣言した
    UnityEvent
    フィールドを含むスクリプトコンポーネントを持つゲームオブジェクトを選択します。
  2. コールバックのスロットを追加するには、イベント名の下の + ボタンをクリックします。
  3. コールバックを受け取る UnityEngine.Object を選択します。オブジェクトセレクターを使用するか、オブジェクトをフィールドにドラッグアンドドロップして選択できます。
  4. イベントが発生したときに呼び出す関数を選択します。ドロップダウンセレクターには、ゲームオブジェクトとそのコンポーネントで使用できる 適切なメソッド をフィルタリングしたリストが表示されます。
  5. 必要に応じて 1 から 4 のステップを繰り返し、同じイベントにコールバックを追加します。

Inspector ウィンドウで Trigger Entered および Trigger Exited というイベントのコールバックを設定

静的呼び出しと動的呼び出し

Inspector ウィンドウから
UnityEvent
を設定する場合、サポートされる関数には 2 つの種類があります。
  • 静的 呼び出しはオーサリング時に完全に事前設定され、Inspector ウィンドウで定義したターゲットとパラメーターの値を使用します。コールバックが発生すると、Inspector で定義したパラメーターの値を使用してターゲット関数が実行されます。これは、ランタイムに変動しない値に適しています。例えば、特定の衝突が発生するたびに、設定した量だけ体力値を減分したい場合などです。静的にバインドされた関数は、関数選択リストの Static Parameters の下に表示されます。
  • 動的 呼び出しはコードからプログラムで呼び出され、呼び出される
    UnityEvent
    の型に一致するパラメーターを使用します。これはランタイムで変化する値、例えばキャラクターが各攻撃で受けるダメージの変数量を表す
    float
    などに適しています。UI はコールバックにフィルターをかけ、
    UnityEvent
    の型で有効なシグネチャを持つ動的関数のみを表示します。例えば、
    UnityEvent<string>
    がある場合、関数セレクターは Dynamic string ヘッダーの下に
    string
    パラメーターを受け取るすべての関数を表示します。

Inspector ウィンドウでシグニチャがイベントの型と一致する静的関数と動的関数を選択

UnityEvent のジェネリックサポート

デフォルトでは、
Monobehaviour
内の
UnityEvent
は
void
関数に動的にバインドされます。ただし、以下の例に示すように、最大 4 つのジェネリック型パラメーターを持つ
UnityEvent
を作成できます。
using UnityEngine;using UnityEngine.Events;public class GenericTest : MonoBehaviour{ public UnityEvent<int, int, bool, string> myEvent; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { if (myEvent == null) { myEvent = new UnityEvent<int, int, bool, string>(); } myEvent.AddListener(Ping); } // Update is called once per frame void Update() { if (Input.anyKeyDown && myEvent != null) { myEvent.Invoke(5, 6, true, "Hello"); } } void Ping(int i, int j, bool print, string text) { if (print) { Debug.Log("Ping: " + text + i + j); } }}

追加リソース