【UE4C++】BPのコンストラクションスクリプトが呼ばれる前にメンバー変数を変える方法
こんにちは!タカオです。
今回は
C++でアクターをスポーンするとき、引数を指定して生成するということができないようなので、
それをある程度対処する方法です。
開発環境:
UE4.20.3
Windows10
ふつうにスポーンする場合は、
FActorSpawnParameters spawnParameters;
spawnParameters.Owner = this;
auto myActorClass = TSubclassOf<AMyActor>();
auto spawnLocation = FVector::ZeroVector;
auto spawnRotation = FRotator::ZeroRotator;
SpawnActorの引数に使う変数を用意して、
auto actor = GetWorld()->SpawnActor<AMyActor>(myActorClass, spawnLocation, spawnRotation, spawnParameters);
こんな感じ。これだとコンストラクタに引数を指定できません。
なのでこれの代わりに、
auto spawnTransform = FTransform(spawnRotation, spawnLocation);
auto actor = Cast<AMyActor>(UGameplayStatics::BeginDeferredActorSpawnFromClass(this, myActorClass, spawnTransform));
actor->Init("なにかしらの値");//ここで入れる
UGameplayStatics::FinishSpawningActor(actor, spawnTransform);
UGameplayStatics::BeginDeferredActorSpawnFromClassとUGameplayStatics::FinishSpawningActorの間で初期化処理を入れる。
とすると、BPのコンストラクションスクリプトが呼ばれる前にメンバー変数を変えることができます。
参考:
https://answers.unrealengine.com/questions/284744/spawning-an-actor-with-parameters.html