-
[Unreal Engine] Spawn actor with parametersUnreal Engine 5._ 2022. 10. 18. 18:49
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함수를 호출할 수 있습니다.
위 방법은 액터 외에, 액터를 상속받는 자료형 (캐릭터 등)에도 적용이 가능합니다.
특정 생성자를 호출하는 방법은 아직 찾지 못 했지만, 찾게 될 경우 공유할 수 있도록 하겠습니다.
감사합니다.
'Unreal Engine 5._' 카테고리의 다른 글
[Unreal Engine] C2027 : use of undefine type 'AHUD' (0) 2022.12.26 [Unreal Engine] C++ : Log를 남기는 여러가지 방법 (0) 2022.12.06 [Unreal Engine] Component가 Details Panel에서 안 보일 때 (0) 2022.10.13 [Unreal Engine 5] UE5 시작하기 : 언리얼 에디터 둘러보기 (0) 2022.07.07 [Unreal Engine 5] UE5 시작하기 : 설치부터 실행까지 (0) 2022.07.05