PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 SpawnActorDeferredについて

環境

UE4.19.0
Visual Studio Community 2015

SpawnActorについて

SpawnActorを呼び出すにはWorld, 生成位置、回転情報、名前や所有者の登録等のオプションが必要になります。

#include "Engine/World.h"
#include "ExampleActor.h"

void AExampleGameMode::BeginPlay()
{
    Super::BeginPlay();

    auto const World = GetWorld();
    const FTransform SpawnTransform = FTransform::Identity;
    FActorSpawnParameters parameters;
    auto const exampleActor = World->SpawnActor<AExampleActor>(AExampleActor::StaticClass(), SpawnTransform, parameters);
}

基本的にはこれで問題ないのですが
BeginPlayが呼び出される前に処理を行いたい場合や値を渡したいという場合もあります。

そんな場合に役立つのがSpawnActorDeferredです。

SpawnActorDeferredについて

一先ずコードから見ていきましょう。

#include "Engine/World.h"
#include "ExampleActor.h"

void AExampleGameMode::BeginPlay()
{
    Super::BeginPlay();

    auto const World = GetWorld();
    const FTransform SpawnTransform = FTransform::Identity;
    auto const exampleActor = World->SpawnActorDeferred<AExampleActor>(AExampleActor::StaticClass(), SpawnTransform);

    // BeginPlayが呼び出される前に処理したい初期化処理等
    exampleActor->Initialize();

    // ここでBeginPlayが呼び出される
    exampleActor->FinishSpawning(SpawnTransform);
}

SpawnActorDeferredを利用する機会は何かしら作っていると何度も出てきます。
頭の片隅に入れておくと便利です。