fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でブループリント(Bulepurint)での「WorldContextObject」を暗黙的に扱う(UFUNCTION(meta = (WorldContext = WorldContextObject)))

C++でブループリント(Bulepurint)での「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で実行しようとするとこんな感じのノードになります。
WorldContext000.jpg
「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から呼び出してみます。
WorldContext001.jpg
無事「WorldContextObject」ピンがなくなってすっきりしました。

こういった機能は使うと効率が上がりそうなので覚えておきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/767-c8b93cea

TRACKBACK

PREV | PAGE-SELECT | NEXT