つまり、UnityEventはネイティブC#イベントよりも低速であり、レシーバーへの強い参照を保存します。したがって、ネイティブC#イベントでUnityEventsを使用するために私が見つけることができる唯一の有効な理由は、エディターとの統合です。 見落としがある?
私は何かを見落としているか?
いいえ、あなたは何も見落としていません。 UnityEvent
を使用する唯一の利点と理由は、エディターでイベントを使用できることです。これは、ドラッグアンドドロップする人、またはエディタープラグインを作成する人向けです。
UnityEvent
のもう1つの利点は、デリゲートの誤用やUnityオブジェクトでの匿名デリゲートの使用が原因でUnityオブジェクトが解放されないという問題を防ぐことです。それらを保持しているメインスクリプトが破棄されると、それらは解放されますが。これは、UnityEvent
が弱い参照で実装されているため、この問題が解消または最小化されるためです。これらの2つは、ネイティブC#イベントでUnityEvent
を使用する価値はまだあります。
Editorプラグインを作成していない場合は、パフォーマンスが高速でメモリ使用量が少ないため、常にネイティブイベントを使用し、UnityEventを介してデリゲートする必要があります。詳細については、 this および this の投稿を参照してください。
UnityEventは主にUnity UIシステムで使用されます。これは、uguiがボタンのOnClickコールバックなどのuiシステムでのコールバック構成をシリアル化する必要があるためです。
シリアライゼーションは、ユニティゲームエンジンの最も重要な機能です。C#組み込みイベントシステムでは、シリアライゼーションを実行できません。
したがって、ユニティUIシステムで作業する場合は、UnityEventを使用する必要があります。コールバック関数の構成をシリアル化する場合は、UnityEventを使用する必要があります。
他の状況では、c#組み込みイベントを使用します。