UE5/UE4 C++でブループリント(Bulepurint)での「WorldContextObject」を暗黙的に扱う(UFUNCTION(meta = (WorldContext = WorldContextObject)))
こちらを参考にさせていただきました。
・UE4: Blueprint 向けに WorldContextObject が必要な機能を提供する際に暗黙的に WorldContextObject を扱わせられるように C++ コードで対応する方法
https://usagi.hatenablog.jp/entry/2018/03/09/103434
C++で関数ライブラリ(Blueprint Function Library)を作成して以下のような関数を作成したとします。
#include "Kismet/BlueprintFunctionLibrary.h"
// 関数ライブラリクラス
UCLASS()
class UNewBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{GENERATED_BODY()public:// static で関数を定義する};
UFUNCTION(BlueprintCallable, BlueprintPure)
static int32 GetValue1(const UObject* WorldContextObject);
この関数をBPで実行しようとするとこんな感じのノードになります。

「World Context Object」が邪魔ですね…。
これを暗黙的に処理してくれるのが「UFUNCTION(meta = (WorldContext = WorldContextObject))」という記述です。
とのことのようです。外部から WorldContextObject の供給を受ければ問題無く動作する。ついで、その際に Blueprint 向けの UFUNCTION の定義に WorldContext を与えておくと、 Blueprint でこの関数を使用する際に、暗黙的に WorldContextObject が適切に与えられ、かつ Blueprint では余計なコネクターなども綺麗に省略される状態にできる。
というわけで実際に試してみました。
#include "Kismet/BlueprintFunctionLibrary.h"
// 関数ライブラリクラス
UCLASS()
class UNewBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{GENERATED_BODY()public:// static で関数を定義する};
UFUNCTION(BlueprintCallable, BlueprintPure, meta = (WorldContext = WorldContextObject))
static int32 GetValue2(const UObject* WorldContextObject);
上記「GetValue2」関数をBPから呼び出してみます。

無事「WorldContextObject」ピンがなくなってすっきりしました。
こういった機能は使うと効率が上がりそうなので覚えておきたいですね。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑