環境
UE4.23.0
Delagateとは
Blueprintから使用するDelegateではSetTimer by EventやEvent DispatcherにBindする際に使用するEvent等があります。
今回はSet Timer by Eventで例を作成していますが
Event DIspatcherを使用した場合でも同様にBindすることが可能です。
関数やMacroからは通常delegateを引数に追加することができません。
MacroでDelegateを使用する方法
MacroにはWildcardという型があり、それを引数にすることで使用できます。
C++でいうところのTemplateのようなものだと理解してもらえればと思います。
WildcardはBlueprintのforeachloopノード等で使用されています。
例えば1秒後にEventを実行するようなMacroを組む場合は下記のような形になります。
あとはEventをWildcardに接続すると下図のようにWildcard型がDelegateとして認識されます。
実行結果は通常のSetTimer by Eventで1.0を設定したときと同じ結果を得ることができました。
関数/MacroでDelegateを使用する方法
続いて関数とMacroのどちらでもDelegateを使用できる方法を紹介しますが
ハック的なやり方のため、動作の安全性については保証できません
関数またはMacroのノードグラフからSet Timer by Eventノードを呼び出します。
続いて、Event PinをInputに接続することでDelegateを入力引数として登録することができます。
動画ではMacroで説明を行いましたが、関数の場合でも同様の操作でDelegateの登録が可能です。
動作についても問題なく行えます。
以上、UE4のちょっとしたハック的なテクニックでした。
実は過去記事でもこちらをサラッと紹介していました。
「FunctionLibraryに登録してFade終了後のCallback関数も登録可能にする」のところでFunction Libraryにdelegateを登録しています。
papersloth.hatenablog.com