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
'Unreal' 카테고리의 다른 글
[Unreal5] Input Action와 Input Mapping Context 사용방법 (0) | 2024.06.03 |
---|---|
[Unreal5] Component 추가 및 속성 변경 (0) | 2024.05.30 |
[Unreal5] 특정 조건에 맞는 액터를 찾기 및 이동 (0) | 2024.05.28 |
[Unreal5]GameInstance와 GameModeBase (0) | 2024.05.22 |
[Unreal5] UObject와 Reflection (0) | 2024.05.22 |