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で確認しています。

このエントリーをはてなブックマークに追加