コンストラクションスクリプトがゲーム、エディタ問わずに実行されることを利用して、エディタで実行するイベントとして、ブループリントの関数を C++ に設定することができるようになっています。
これはアセットのロードが終わったら C++ から実行されるイベントとして、ブループリントで定義されている OnLoaded 関数を設定する処理です。
コンストラクションスクリプトを使えば、このようなことができるようになっているのですが、ゲームが実行状態でない時にはブループリント関数は実行できないようになっています。
では、どうすれば実行できるようになるか?
それは、FEditorScriptExecutionGuard という構造体を使えば解決できます。
void RunBlueprintFunctionByEditor(FDynamicDelegate Delegate)
{
FEditorScriptExecutionGuard Guard;
Deleagate.ExecuteIfBound();
}
このように、デリゲータの実行関数と同じスコープ内にこの構造体の変数を定義すれば、エディタの処理中でもブループリント関数が実行できるようになります。