マルチキャスト デリゲートの機能の大部分は、シングルキャスト デリゲートと同じです。オブジェクトに対して弱い参照のみを持つ、構造体に使用できる、容易にコピーできるなどです。 通常のデリゲートと同じように、マルチキャスト デリゲートもロードおよび保存が可能で、リモートでトリガーできます。ただし、マルチキャスト デリゲートの関数では戻り値を使用できません。マルチキャスト デリゲートは、 一連のデリゲートを容易にパスするために最適です。
マルチキャスト デリゲートの宣言
マルチキャスト デリゲートは 通常のデリゲートの宣言 と同じように宣言されますが、マルチキャスト デリゲートに固有のマクロ バリエーションを使用します。
| 宣言マクロ | 説明 |
|---|---|
DECLARE_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
マルチキャスト デリゲートを作成します。 |
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
動的マルチキャスト デリゲートを作成します。 |
マルチキャスト デリゲートのバインディング
マルチキャスト デリゲートでは複数の関数をバインディングして、デリゲートの実行時にすべてを呼び出すことができます。その結果、バインディング関数はよりセマンティクスの配列のようになります。
| 機能 | 説明 |
|---|---|
Add() |
このマルチキャスト デリゲートの呼び出しリストに関数デリゲートを追加します。 |
AddStatic() |
生 C++ ポインタのグローバル関数デリゲートを追加します。 |
AddRaw() |
生 C++ ポインタのデリゲートを追加します。生ポインタはどのような参照も使用しないため、オブジェクトがデリゲートから削除されている場合は、呼び出すのが安全ではない可能性があります。Execute()! を呼び出す場合は注意してください。 |
AddSP() |
共有ポインタベースの (高速で、スレッドセーフではない) メンバー関数デリゲートを追加します。共有ポインタ デリゲートは、オブジェクトに対する弱い参照を保持します。 |
AddUObject() |
UObject ベースのメンバー関数デリゲートを追加します。UObject デリゲートは、オブジェクトに対する弱い参照を保持します。 |
Remove() |
このマルチキャスト デリゲートの呼び出しリストから関数を削除します (パフォーマンスは O(N))。デリゲートの順番は維持されない可能性があることに注意してください。 |
RemoveAll() |
このマルチキャスト デリゲートの呼び出しリストから、指定した UserObject にバインディングされているすべての関数を削除します。デリゲートの順番は維持されない可能性があることに注意してください。 |
RemoveAll() は、提示されたポインタにバインディングされたすべての登録済みデリゲートを削除します。オブジェクト ポインタにバインディングされていない生デリゲートは、この関数によって削除されないことに注意してください。
これらの関数のバリエーション、引数、実装については、DelegateSignatureImpl.inl (..\Engine\Source\Runtime\Core\Public\Delegates\ 内) を参照してください。
マルチキャストの実行
マルチキャスト デリゲートによって、複数の関数デリゲートをアタッチし、その後マルチキャスト デリゲートの Broadcast() 関数を呼び出すことで同時にすべてを実行できます。マルチキャスト デリゲートのシグネチャは、戻り値を使用することはできません。
何もバインディングされていない場合でも、マルチキャスト デリゲートでは常に Broadcast() を呼び出すことが安全です。デリゲートを使用して出力変数を初期化する場合にのみ注意が必要です。これは、通常はまったく推奨されません。
Broadcast() を呼び出す際の、バウンド関数の実行順序は決まっていません。関数が追加された順番とは異なる場合があります。
| 機能 | 説明 |
|---|---|
Broadcast() |
期限切れのオブジェクトを除き、すべてのバウンド オブジェクトにこのデリゲートをブロードキャストします。 |