UE5/UE4 C++で「UWorld」を持たない「UObject」を継承したクラスで「Spawn Actor from Class」ノードなどが使えるようにする(virtual UWorld* GetWorld() const)
C++で「UWorld」を持たない「UObject」を継承したクラスで「Spawn Actor from Class」ノードなどが使えるようにする方法です。
こんな感じのクラスがあるとします。
このクラスを継承したBPを作成して「Spawn Actor from Class」を実行します。

「Spawn Actor from Class」が出てこない…!?
どうも「Actor」のように「UWorld」を持たないクラスでは「Spawn Actor from Class」といったものは実行できないようです。
確かにスポーンしたところで、どのワールドに配置するの?みたいな問題がでてくるのかなと…。
とはいえ、スクリプトみたいに実態自体は特にワールドに廃止いないけれど、
「Spawn Actor from Class」が使いたい!みたいなことは普通に起きると思いますので調べてみました。
実際にやってみました。
再び「Spawn Actor from Class」ノードを呼び出してみます。

無事「Spawn Actor from Class」を呼び出すことができるようになりました。
ここらへん仕組み的なものは覚えておくと、いろいろとやると思った場合に役に立つのかなと思います。
こんな感じのクラスがあるとします。
「UOBJECT」を継承したクラスになります。UCLASS(Blueprintable)
class UBlogClass : public UObject
{GENERATED_BODY()};
このクラスを継承したBPを作成して「Spawn Actor from Class」を実行します。

「Spawn Actor from Class」が出てこない…!?
どうも「Actor」のように「UWorld」を持たないクラスでは「Spawn Actor from Class」といったものは実行できないようです。
確かにスポーンしたところで、どのワールドに配置するの?みたいな問題がでてくるのかなと…。
とはいえ、スクリプトみたいに実態自体は特にワールドに廃止いないけれど、
「Spawn Actor from Class」が使いたい!みたいなことは普通に起きると思いますので調べてみました。
といった「GetWorld」関数をオーバーライドしてあげれば大丈夫のようです。virtual UWorld* GetWorld() const override;
実際にやってみました。
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」ノードを呼び出してみます。

無事「Spawn Actor from Class」を呼び出すことができるようになりました。
ここらへん仕組み的なものは覚えておくと、いろいろとやると思った場合に役に立つのかなと思います。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑