-
언리얼 C++ 객체(액터) 스폰 (Class, Blueprint)UnrealEngine 2020. 1. 30. 10:29
SpawnActor 메서드
Actor 의 새 인스턴스를 생성하는 과정을 스폰 (spawn)이라 합니다. Actor 의 스폰은 UWorld::SpawnActor() 함수를 이용합니다. 이 함수는 지정된 클래스의 새 인스턴스를 생성한 다음 새로 생성된 Actor 로의 포인터를 반환합니다. UWorld::SpawnActor() 는 클래스 계층구조 내 Actor 클래스를 상속하는 클래스 인스턴스를 생성할 때만 사용해야 합니다.
AActor* UWorld::SpawnActor ( UClass* Class, FName InName, FVector const* Location, FRotator const* Rotation, AActor* Template, bool bNoCollisionFail, bool bRemoteOwned, AActor* Owner, APawn* Instigator, bool bNoFail, ULevel* OverrideLevel, bool bDeferConstruction )
파라미터설명
Class
스폰시킬 Actor 의 클래스를 나타내는 UClass 입니다.
InName
옵션. 스폰시킬 Actor 의 Name 으로 할당시킬 FName 입니다. 지정된 값이 없으면 스폰되는 Actor 의 이름은 [Class]_[Number] 형태를 사용하여 자동 생성됩니다.
Location
옵션. Actor 를 스폰시킬 초기 위치를 제공하는 FVector 입니다.
Rotation
옵션. Actor 를 스폰시킬 초기 방향을 제공하는 FRotator 입니다.
Template
옵션. 새 Actor 를 스폰할 때 템플릿으로 사용할 AActor 입니다. 스폰되는 Actor 는 템플릿 Actor 의 프로퍼티 값을 사용하여 초기화됩니다. 지정된 템플릿 Actor 가 없는 경우, 클래스 디폴트 오브젝트(CDO)를 사용하여 스폰되는 Actor 를 초기화시킵니다.
bNoCollisionFail
옵션. Actor 스폰시 콜리전 테스트를 할 것인지를 결정하는 bool 입니다. True 면 Actor 스폰시 루트 컴포넌트나 템플릿 Actor 의 콜리전 세팅에 관계없이 콜리전 테스트를 하지 않습니다.
bRemoteOwned
옵션. bool.
Owner
옵션. 스폰된 Actor 를 소유하는 AActor 입니다.
Instigator
옵션. 스폰된 Actor 가 입힌 피해를 담당하는 APawn 입니다.
bNoFail
옵션. 특정 조건을 충족하지 않을 때 스폰 실패여부를 결정하는 bool 입니다. 이 옵션이 True 면 스폰되는 클래스가 bStatic=true 라거나, 템플릿 Actor 의 클래스가 스폰되는 Actor 의 클래스와 같지 않아서라거나 하는 이유로 스폰이 실패하지 않습니다.
OverrideLevel
옵션. Actor 를 어느 ULevel 안에 스폰시킬지, 예로 Actor 의 Outer 식입니다. 지정된 레벨이 없으면 Owner 의 Outer 가 사용됩니다. 지정된 Outer 가 없으면 퍼시스턴트 레벨이 사용됩니다.
bDeferConstruction
옵션. construction script 를 실행시킬지 결정하는 bool 입니다. True 면 스폰되는 Actor 에서 construction script 가 실행되지 않습니다. Actor 가 Blueprint 에서 스폰될 때만 적용 가능합니다.
반환값
AActor 포인터 형태로 스폰되는 Actor 입니다. 반환값은 Class 파라미터로 지정된 파생형으로의 변환을 위해 형변환(cast)시켜줘야 합니다.
(example)
AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location);
World 객체 가져오기
12345// Actor의 경우UWorld * world = GetWorld();// Editor 모듈일 경우UWorld *world = GEditor->GetEditorWorldContext().World();cs - C++ Class Spawn
123456FActorSpawnParameters spawnParams;FRotator rotator;FVector spawnLocation = FVector::ZeroVector;world->SpawnActor<AMyActor>(AMyActor::StaticClass(), spawnLocation, rotator, spawnParams);cs - Blueprint Spawn
123456789FName path = TEXT("Blueprint'/MyPlugin/MyBlueprint.MyBlueprint'");UBlueprint* ObjectToSpawn =Cast<UBlueprint>(StaticLoadObject(UBlueprint::StaticClass(), NULL, *path.ToString()));FActorSpawnParameters spawnParams;FRotator rotator;FVector spawnLocation = FVector::ZeroVector;world->SpawnActor<AActor>(ObjectToSpawn->GeneratedClass, spawnLocation, rotator, spawnParams);cs 4.15 이후
1234567891011121314151617FName path = TEXT("Class'/HumanStudio/StudioManager.StudioManager_C'");UClass* GeneratedBP = Cast<UClass>(StaticLoadObject(UClass::StaticClass(), NULL, *path.ToString()));UGameplayStatics::GetAllActorsOfClass(world, GeneratedBP, FoundActors);if (FoundActors.Num() == 0){FTransform transform = FTransform::Identity;world->SpawnActor<AActor>(GeneratedBP, transform);}else{for (auto& act : FoundActors){UE_LOG(LogClass, Display, TEXT("TEST: %s"), *act->GetFullName());}}cs