[Unreal Engine] Spawn actor with parameters
C++에서 레벨에 액터를 생성하는 방법은 SpawnActor 함수를 이용하는 것 입니다.
이 때 생성되는 액터의 기본 생성자를 호출하기 때문에, 값을 초기화 하는 데 어려움이 있을 수 있습니다.
액터를 생성 후, 값을 설정하는 함수를 추가적으로 호출하는 것을 생각해보았지만, 구조적으로 불안하게 느껴졌습니다.
위 문제를 해결하기 위해 검색을 해본 결과를 공유하고자 합니다.
출처
Spawn actor with dynamic data (Unreal Engine Forums)
1. 기본적인 액터 생성 방법 (SpawnActor<>)
액터를 생성하고자 할 때에는 다음과 같은 코드를 사용할 수 있습니다.
FTransform spawnTransform;
AMyActor* act =
GetWorld()->SpawnActor<AMyActor>(
AMyActor::StaticClass(),
spawnTransform);
이 때, SpawnActor 함수는 여러 종류의 파라미터를 받을 수 있도록 오버로딩 되어있으니, 상황에 맞게 사용하는 것이 좋겠습니다.
위와 같이 SpawnActor함수를 사용해 액터를 생성했을 경우, 액터의 생성자와 BeginPlay함수가 순서대로 실행됩니다.
2. 지연된 액터 생성 방법 (SpawnActorDeferred<>)
이 방법 또한 서론의 문제점 (생성 후 값 설정 함수를 호출함)에서 벗어나지는 못합니다.
하지만 액터가 완전히 생성되는 시점을 조절하는 것으로, 문제를 어느정도 해결할 수 있게 되었습니다.
FTransform spawnTransform;
AMyActor* act =
GetWorld()->SpawnActorDeferred<AMyActor>(
AMyActor::StaticClass(),
spawnTransform);
// Setting value functions
...
act->FinishSpawning(spawnTransform);
SpawnActorDeferred함수 또한 여러 값을 받을 수 있도록 오버로딩 되어있으니, 상황에 맞는 적절한 오버로딩 버전을 선택할 수 있습니다.
위와 같이 호출할 경우, SpawnActorDeferred함수에서는 액터의 기본 생성자를 호출합니다.
이 후 값을 설정하는 함수를 호출할 수 있습니다.
설정이 완료되었을 때, 액터 인스턴스의 FinishSpawning 함수를 호출하는 것으로 액터의 BeginPlay함수를 호출할 수 있습니다.
위 방법은 액터 외에, 액터를 상속받는 자료형 (캐릭터 등)에도 적용이 가능합니다.
특정 생성자를 호출하는 방법은 아직 찾지 못 했지만, 찾게 될 경우 공유할 수 있도록 하겠습니다.
감사합니다.