ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 언리얼 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 객체 가져오기

    1
    2
    3
    4
    5
    // Actor의 경우 
    UWorld * world = GetWorld();
     
    // Editor 모듈일 경우
    UWorld *world = GEditor->GetEditorWorldContext().World();
    cs

     

    - C++ Class Spawn

    1
    2
    3
    4
    5
    6
    FActorSpawnParameters spawnParams;
    FRotator rotator;
    FVector spawnLocation = FVector::ZeroVector;
     
    world->SpawnActor<AMyActor>(AMyActor::StaticClass(), spawnLocation, rotator, spawnParams);
     
    cs
     

    - Blueprint Spawn 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    FName 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 이후

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    FName 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

    댓글

Designed by Tistory.