Version: 5.4
スクリプトシリアライゼーション
Null Reference Exception

UnityEvent

UnityEvent は実行時に追加のプログラミングやスクリプト設定を必要とせずに、編集時から保持される駆動コールバックをユーザーが使用できるようにする方法です。

UnityEvent は以下のような場合に便利です。

  • コンテンツ駆動コールバック

  • 分離システム

  • 永続コールバック

  • 事前設定コールイベント

UnityEvent はどの MonoBehaviour にも加えることができ、標準の .NET デリゲートのようにコードから実行することができます。UnityEventMonoBehaviour に加えられるときインスペクターに表示され、永続コールバックも加えることができます。

UnityEvent は、標準のデリゲートと同様の制限があります。つまり、ターゲットである要素に対するリファレンスを保持し、収集ターゲットがガベージコレクションされることを阻止します。ターゲットとして UnityEngine.Object を保有している場合、ネイティブ表現は消え、コールバックは呼び出されません。

UnityEvent を使用する

エディターからコールバックを設定するために、いくつかの必要なステップがあります。

  1. スクリプトには必ず UnityEngine.Events をインポート/使用してください。

  2. コールバックのスロットを加えるために + アイコンを選択します。

  3. コールバックを受け取りたい UnityEngine.Object を選択します(これにはオブジェクトセレクターを使用することができます)。

  4. 呼び出したい関数を選択します。

  5. イベントのために、一つ以上のコールバックを加えることができます。

インスペクターから UnityEvent を設定する場合、サポートされている関数が 2 つあります。

  • 静的コールは、UI から設定された事前設定の値を伴う、事前設定されたコールです。これは、コールバックが実行されたとき対象の関数は UI に入力されている引数を伴って実行されるという意味です。
  • 動的コールはコードから送信された引数を使用して実行されます。この引数は実行されている UnityEvent のタイプと結びついています。UI はコールバックにフィルターをかけ、UnityEvent で有効な動的コールのみを表示します。

Generic UnityEvent

デフォルトで MonoBehaviourUnityEvent は動的に void 関数をバインドします。UnityEvent は 4 つまで引数を伴う関数バインドをサポートしていますので、これは動的実行のケースである必要はありません。これを実行するために、複数の引数をサポートするカスタム UnityEvent クラスを定義する必要があります。これは以下のように、本当に簡単にできます。

[Serializable]

public class StringEvent : UnityEvent <string> {}

このインスタンスをベースの UnityEvent の代わりにあなたのクラスに加えることで、コールバックを動的に文字列関数と結びつけることを可能にします。

これは、‘string’ を引数として Invoke() 関数を呼び出すことで実行することができます。

UnityEvent はジェネリック定義で最大 4 つの引数を定義することができます。

スクリプトシリアライゼーション
Null Reference Exception