PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 Blueprintでdelegateを引数で使用する方法

環境

UE4.23.0

Delagateとは

Blueprintから使用するDelegateではSetTimer by EventやEvent DispatcherにBindする際に使用するEvent等があります。
今回はSet Timer by Eventで例を作成していますが
Event DIspatcherを使用した場合でも同様にBindすることが可能です。
f:id:PaperSloth:20191023021502p:plain

関数やMacroからは通常delegateを引数に追加することができません。
f:id:PaperSloth:20191023021703p:plain

MacroでDelegateを使用する方法

MacroにはWildcardという型があり、それを引数にすることで使用できます。
f:id:PaperSloth:20191023022703p:plain

C++でいうところのTemplateのようなものだと理解してもらえればと思います。
WildcardはBlueprintのforeachloopノード等で使用されています。

例えば1秒後にEventを実行するようなMacroを組む場合は下記のような形になります。
f:id:PaperSloth:20191023022747p:plain

あとはEventをWildcardに接続すると下図のようにWildcard型がDelegateとして認識されます。
f:id:PaperSloth:20191023022909p:plain

実行結果は通常のSetTimer by Eventで1.0を設定したときと同じ結果を得ることができました。
f:id:PaperSloth:20191023023043p:plain

関数/MacroでDelegateを使用する方法

続いて関数とMacroのどちらでもDelegateを使用できる方法を紹介しますが
ハック的なやり方のため、動作の安全性については保証できません

関数またはMacroのノードグラフからSet Timer by Eventノードを呼び出します。
続いて、Event PinをInputに接続することでDelegateを入力引数として登録することができます。
f:id:PaperSloth:20191023023923g:plain
f:id:PaperSloth:20191023024028p:plain

動画ではMacroで説明を行いましたが、関数の場合でも同様の操作でDelegateの登録が可能です。
動作についても問題なく行えます。
f:id:PaperSloth:20191023024227p:plain


以上、UE4のちょっとしたハック的なテクニックでした。

実は過去記事でもこちらをサラッと紹介していました。
「FunctionLibraryに登録してFade終了後のCallback関数も登録可能にする」のところでFunction Libraryにdelegateを登録しています。
papersloth.hatenablog.com