エディタの処理としてブループリント関数を C++ から実行する方法

More than 3 years have passed since last update.

コンストラクションスクリプトがゲーム、エディタ問わずに実行されることを利用して、エディタで実行するイベントとして、ブループリントの関数を C++ に設定することができるようになっています。

以下がその例です。

image

これはアセットのロードが終わったら C++ から実行されるイベントとして、ブループリントで定義されている OnLoaded 関数を設定する処理です。

コンストラクションスクリプトを使えば、このようなことができるようになっているのですが、ゲームが実行状態でない時にはブループリント関数は実行できないようになっています。

では、どうすれば実行できるようになるか?

それは、FEditorScriptExecutionGuard という構造体を使えば解決できます。

void RunBlueprintFunctionByEditor(FDynamicDelegate Delegate)

{
FEditorScriptExecutionGuard Guard;
Deleagate.ExecuteIfBound();
}

このように、デリゲータの実行関数と同じスコープ内にこの構造体の変数を定義すれば、エディタの処理中でもブループリント関数が実行できるようになります。