UnityEvent と C# イベントの呼び出し方法の比較資料

本資料では、Unity の UnityEvent と通常の C# イベント(デリゲート)の呼び出し方法の違いについて解説します。


1. 通常の C# イベント(デリゲート)の場合

  • 呼び出し方法:
    • イベントやデリゲートは、宣言された変数名を関数呼び出しのように記述して呼び出すことができます。
      例:
// null チェックを含む呼び出し
OnSomething?.Invoke();
// または、nullチェック後に直接呼び出す方法
if (OnSomething != null)
    OnSomething();
  • 性質:
    • event キーワードを使用して宣言される場合、外部から直接呼び出すことはできず、イベントを発生させるのは宣言クラス内部のみとなります。
    • 主にコード上での利用を目的としており、直接関数呼び出し構文で発生させることができます。

2. UnityEvent の場合

  • 呼び出し方法:
    • UnityEvent はシリアライズ可能なクラスであり、エディターのインスペクター上でリスナー(処理)を登録できるように設計されています。
    • イベントを発生させる際は、必ず Invoke メソッドを呼び出す必要があります。
      例:
// 衝突が発生した際のイベント発生
OnCollisionEnterEvent.Invoke(collision);
  • 性質:
    • エディターとの連携が容易で、視覚的にリスナーの設定が可能です。
    • 独自の Invoke メソッドを持ち、イベント発生時に登録されたリスナー全てに通知が行われます。

3. まとめ

  • 呼び出し方法の違い:
    • C# イベント(デリゲート):
      • イベント変数を直接関数呼び出しのように使える。
      • 例: OnSomething(); または OnSomething?.Invoke();
    • UnityEvent:
      • 独自の Invoke メソッドを使用してイベントを発生させる。
      • 例: OnCollisionEnterEvent.Invoke(collision);
  • 用途:
    • C# イベント:
      • コード内でシンプルにイベントを管理したい場合に適しています。
      • 外部からの直接呼び出しはできず、内部制御が可能です。
    • UnityEvent:
      • Unity エディター上でリスナーの設定ができ、視覚的に管理が行えるため、デザイナーやプログラマー間の作業分担が容易です。

このように、UnityEvent はエディターでの設定が可能な点が特徴であり、C# イベントはコードでの直接呼び出しがシンプルなため、用途に応じた使い分けが重要です。イベントの発生方法の違いを正しく理解することで、効率的なイベント管理とデバッグが実現できます。