fc2ブログ

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

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

2023年03月 | ARCHIVE-SELECT | 2023年05月

| PAGE-SELECT |

≫ EDIT

UE5/UE4 C++で「UWorld」を持たない「UObject」を継承したクラスで「Spawn Actor from Class」ノードなどが使えるようにする(virtual UWorld* GetWorld() const)

C++で「UWorld」を持たない「UObject」を継承したクラスで「Spawn Actor from Class」ノードなどが使えるようにする方法です。

こんな感じのクラスがあるとします。

UCLASS(Blueprintable)
class UBlogClass : public UObject
{

GENERATED_BODY()
};

「UOBJECT」を継承したクラスになります。

このクラスを継承したBPを作成して「Spawn Actor from Class」を実行します。
GetWorld001.jpg
「Spawn Actor from Class」が出てこない…!?

どうも「Actor」のように「UWorld」を持たないクラスでは「Spawn Actor from Class」といったものは実行できないようです。
確かにスポーンしたところで、どのワールドに配置するの?みたいな問題がでてくるのかなと…。

とはいえ、スクリプトみたいに実態自体は特にワールドに廃止いないけれど、
「Spawn Actor from Class」が使いたい!みたいなことは普通に起きると思いますので調べてみました。

virtual UWorld* GetWorld() const override;

といった「GetWorld」関数をオーバーライドしてあげれば大丈夫のようです。

実際にやってみました。

UCLASS(Blueprintable)
class UBlogClass : public UObject
{

GENERATED_BODY()
public:
// GetWorld をオーバーライド
virtual UWorld* GetWorld() const override;
};


// GetWorld をオーバーライド
UWorld* UBlogClass::GetWorld() const
{
// 実際は nullptr では駄目です。メンバの GetWorld() などを渡してください。
return (nullptr);
}

再び「Spawn Actor from Class」ノードを呼び出してみます。
GetWorld000.jpg
無事「Spawn Actor from Class」を呼び出すことができるようになりました。

ここらへん仕組み的なものは覚えておくと、いろいろとやると思った場合に役に立つのかなと思います。

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

| PAGE-SELECT |