Unreal

[Unreal5] 오브젝트 Load 방법 및 생성

usingsystem 2024. 5. 28. 22:02
728x90

TSubclassOf와 ObjectPtr

TSubclassOf

  • 지정된 기본 클래스에서 파생된 클래스만 참조하는 걸 보장한다.

ObjectPtr

  • Unreal Engine 5에서 도입된 새로운 스마트 포인터 타입입니다. 이 포인터는 UObject 참조를 더 안전하고 효율적으로 관리하기 위해 설계되었습니다. TObjectPtr는 기존의 UObject* 대신 사용할 수 있다.
	UPROPERTY()
	TObjectPtr<class AR1Actor> Actor;

	UPROPERTY()
	TSubclassOf<AR1Actor> ActorClass;//AR1Actor를 상속받은 모든걸 담을 수 있다.

 

ConstructorHelpers::FClassFinder (초기화 시점 사용)

ConstructorHelpers::FClassFinder는 주로 UClass 타입의 클래스를 로드하는 데 사용됩니다. 이는 특정 블루프린트 클래스를 로드하거나, 게임 내에서 특정 클래스 타입의 객체를 생성하고자 할 때 유용합니다.

블루프린 클래스를 불러올 때는 경로 뒤에 _C를 붙여야한다.

 

특징

  • 초기화 시점에 클래스 자산을 미리 로드해야 할 때 사용합니다.
  • 주로 생성자에서만 사용됩니다.
  • Succeeded() 메서드를 사용하여 로드 성공 여부를 확인합니다.
	UPROPERTY()
	TSubclassOf<AR1Actor> ActorClass;//AR1Actor를 상속받은 모든걸 담을 수 있다.

	ConstructorHelpers::FClassFinder<AR1Actor> FindClass(TEXT("/Script/Engine.Blueprint'/Game/_Park/BP_R1Actor.BP_R1Actor_C'"));
	if (FindClass.Succeeded())
	{
		ActorClass = FindClass.Class;
	}

ConstructorHelpers::FObjectFinder (초기화 시점 사용)

ConstructorHelpers::FObjectFinder는 주로 UObject의 인스턴스를 로드하는 데 사용됩니다. 이는 머티리얼, 텍스처, 사운드, 메쉬 등의 다양한 자산을 찾고 로드할 때 유용합니다.

 

특징

  • 초기화 시점에 클래스 자산을 미리 로드해야 할 때 사용합니다.
  • 주로 생성자에서만 사용됩니다.
  • Succeeded() 메서드를 사용하여 로드 성공 여부를 확인합니다.
	UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
	TObjectPtr<UStaticMeshComponent> Box;

	Box = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Box"));

	ConstructorHelpers::FObjectFinder<UStaticMesh> FindMesh(TEXT("/Script/Engine.StaticMesh'/Game/_Park/SM_Cylinder.SM_Cylinder'"));

	if (FindMesh.Succeeded())
	{
		Box->SetStaticMesh(FindMesh.Object);
	}

StaticLoadClass ( 런타임 로드 )

StaticLoadClass는 런타임에 특정 클래스의 객체를 동적으로 로드하는 함수입니다. 주로 UClass 타입의 클래스를 로드하는 데 사용됩니다.

 

특징

  • 런타임에 클래스 자산을 동적으로 로드해야 할 때 사용합니다.
  • 런타임의 어떤 시점에서든 사용할 수 있습니다.
  • 반환된 포인터가 nullptr인지 확인하여 로드 성공 여부를 판단합니다.
UClass* MyClass = StaticLoadClass(AActor::StaticClass(), nullptr, TEXT("/Game/Blueprints/MyBlueprintActor.MyBlueprintActor_C"));
if (MyClass)
{
    // MyClass를 성공적으로 로드함
}

StaticLoadObject ( 런타임 로드 )

StaticLoadObject는 특정 타입의 UObject를 로드하는 함수입니다. 이 함수는 런타임에 자산을 동적으로 로드할 수 있게 해줍니다.

 

특징

  • 런타임에 클래스 자산을 동적으로 로드해야 할 때 사용합니다.
  • 런타임의 어떤 시점에서든 사용할 수 있습니다.
  • 반환된 포인터가 nullptr인지 확인하여 로드 성공 여부를 판단합니다.
UTexture2D* MyTexture = Cast<UTexture2D>(StaticLoadObject(UTexture2D::StaticClass(), nullptr, TEXT("/Game/Textures/MyTexture.MyTexture")));
if (MyTexture)
{
    // MyTexture를 성공적으로 로드함
}

 

SpawnActor

CAST는 DYNAMIC CAST와 같이 상속구조확인을 해 준다. C# is, as와 같음

	FVector Location(0, 0, 0);
	FRotator Rotation(0, 0, 0);

	//1.
	AR1Actor* BeginActor = GetWorld()->SpawnActor<AR1Actor>(Location, Rotation);
	GetWorld()->DestroyActor(BeginActor);//제거

	//2.
	//CAST는 DYNAMIC CAST와 같이 상속구조확인을 해 준다. C# is, as와 같음
	Actor = Cast<AR1Actor>(GetWorld()->SpawnActor(ActorClass));//spawning
	Actor->SetLifeSpan(5.0f);//제거
728x90