GetClass vs StaticClass
StaticClass 는 컴파일 타임에서 UClass 타입의 정보를 얻어오는 것이며, GetClass 는 런타임에서 실제 객체의 클래스를 조회할때 사용된다.
AMyActor* ActorPtr = NewObject<AMyActor>(...);
UObject* ObjPtr = Actor;
UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor
UClass* ObjectClass = UObject::StaticClass(); // UObject
UClass* ActorPtrClass = ActorPtr->GetClass(); // AMyActor
UClass* ObjPtrClass = ObjPtr->GetClass(); // AMyActor
StaticClass 는 컴파일 타임에 이미 정해진 것이다. 하지만 포인터가 가리키는 실제 객체의 타입은 런타임에서 달라질 수 있으므로, 실제 객체의 클래스를 리턴하는 GetClass 의 리턴값은 StaticClass 의 리턴값과 다를 수 있다.
void ASampleCodingPractise::GetClassVsStaticClass()
{
UTestUObject* TestUObject = NewObject<UTestUObject>(this,TEXT("TestUObject"));
UClass* TestUObjectClass = TestUObject->GetClass();
UClass* TestUObjectStaticClass = UTestUObject::StaticClass();
UClass* TestUObjectStaticClassTakenFromGetClass = TestUObject->GetClass()->StaticClass();
UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass(): %s"), *TestUObject->GetClass()->GetName());
UE_LOG(LogCodePractise, Log, TEXT("UTestUObject::StaticClass(): %s"), *UTestUObject::StaticClass()->GetName());
UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass()->StaticClass(): %s"), *TestUObject->GetClass()->StaticClass()->GetName());
bool Test1 = false;
if (TestUObject->IsA(TestUObject->GetClass()))
{
Test1 = true;
}
UE_LOG(LogCodePractise, Log, TEXT("TestUObject->IsA(TestUObject->GetClass() result is: %s"), Test1?TEXT("True") : TEXT("False"));
bool Test2 = false;
if (TestUObject->IsA(UTestUObject::StaticClass()))
{
Test2 = true;
}
UE_LOG(LogCodePractise, Log, TEXT("TestUObject->IsA(UTestUObject::StaticClass()) result is: %s"), Test2 ? TEXT("True") : TEXT("False"));
bool Test3 = false;
if (TestUObject->IsA(TestUObject->GetClass()->StaticClass()))
{
Test3 = true;
}
UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass()->StaticClass()) result is: %s"), Test3 ? TEXT("True") : TEXT("False"));
}
결과)
Output:
LogCodePractise: TestUObject->GetClass(): TestUObject
LogCodePractise: UTestUObject::StaticClass(): TestUObject
LogCodePractise: TestUObject->GetClass()->StaticClass(): Class
LogCodePractise: TestUObject->IsA(TestUObject->GetClass() result is: True
LogCodePractise: TestUObject->IsA(UTestUObject::StaticClass()) result is: True
LogCodePractise: TestUObject->GetClass()->StaticClass()) result is: False
'게임엔진 > Unreal' 카테고리의 다른 글
[Unreal] 언리얼 비동기 애셋 로딩 (Asynchronous Loading) (0) | 2023.11.06 |
---|---|
[Unreal] Reflection (리플렉션) (0) | 2023.10.26 |
[Unreal] 업/다운캐스팅 (Cast 함수) 동작 원리 (0) | 2023.10.26 |
[Unreal] 메모리 관리 (0) | 2023.10.26 |
[Unreal] Actor 와 ActorComponent 의 개념 (vs. Unity 에서의 GameObject 와 비교) (0) | 2023.10.26 |