Blueprintクラスから他のBlueprintクラスの関数を呼び出すために、EventDispatcherを使う方法
一つのBlueprintクラスから他のBlueprintクラスを呼び出したいケースがあると思いますが、
その際にEventDispatherという仕組みを使って実装することができます。
今回の例では、UserWidgetを親に持つ画面内のボタンが押された時に、
StageClearをアニメーションして表示するUserWidgetとは別のクラスのBlueprintの関数を呼び出しています。
イベントの発生元にEventDispacherを割り当てる
イベントの発生元であるUserWidgetのボタンが押された時にEventDispacherを割り当てる方法を見ていきましょう。
まず、ボタンを配置しているUserWidget Blueprintを開きます。
開いたら、マイブループリントウィンドウ内のイベントディスパーチャーのプラスアイコンをクリックし、
EventDispacherを作成します。
名前はstageClearMoveとしました。
処理を発生させたい状態のノードで先ほど定義したstageClearMoveを呼び出します。 ここでは、ゴール用の土管に入った状態で発射ボタンを押すことがトリガーになっており、ブランチのtrue分岐がトリガーとなっています。
レベルブループリント内で呼び出し先のオブジェクトを参照する
例の動画のようにclearを表示させるためには、clearを表示させているBlueprintクラスを参照することが必要ですが、
レベルブループリント内でレベル内に置いたBlueprintオブジェクトを参照することができます。
今回参照したいオブジェクトは、StageClearと表示されたActorを親に持ち、テキストを描画するために
TextRenderを子にもっているBlueprintクラス StageClearBpで、
中身は下図のようになっています。
内容は、カスタムイベントmoveToCenterで、TimeLineEventを発生さして、テキストを画面中央に持ってくるというものです。
EventDispacherを使ってこの関数を呼び出したいので、レベルブループリント内でこのオブジェクトを参照できるようにします。
まず、マップ内にStageClearBpを配置します。
配置したら、下図のようにStageClearBpが選択された状態にして、levelBlueprintを開きます。
levelBlueprintを開いたら、Blueprintグラフ内で右クリックを押すと、
StageClearBpのリファレンスを作成欄が表れるので、クリックしリファレンスをBlueprintグラフ内に作成します。
続いて、トリガーとなるボタンを作成しているUserWidgetクラスLaunchButtonにDispatcherイベントを割り当てます。
今回の例では、LaunchButtonはLevelBlueprint内でインスタンス化しているので、そのタイミングでイベントを割り当てます。
LaunchButtonをBlueprintグラフ内でインスタンス化した後にStageClearMoveにイベントをバインドを選択してください。
そこから作成された新たなノード(この例では、stageClearMove_イベント_1)がトリガーとなるので、
そのノードとStageClearBpのMoveToCenterを繋げば、ボタンが押されたことをトリガーとして、
StageClearBpのMoveToCenterを呼び出すことができます。
UnrealEngine4.19で確認しています。