Unreal Engine 5._
[Unreal Engine] IsA : Object type check in C++
ruru14
2023. 2. 17. 14:23
오브젝트에 대한 타입 체크가 필요한 경우, 블루프린트는 아래의 방법을 사용할 수 있습니다.
첫 번째는 위쪽의 Cast노드이고, 두 번째는 아래의 =(Equal) 노드입니다.
이번 글에서는 C++에서 오브젝트의 타입을 체크할 수 있는 기능에 대하여 살펴보도록 하겠습니다.
1. BP to C++
더보기
C++또한 위 블루프린트 노드와 유사한 코드를 작성할 수 있습니다.
/*
Get actor code, stored in myActor variable
*/
// Case1 : Cast
auto tmp = Cast<AMyObject>(myActor);
if(IsValid(tmp)) { }
// Case2 :
if(myActor == Cast<AMyObject>(AMyObject::StaticClass())) { }
위와 같이 블루프린트의 상황을 흉내낼 수는 있으나, 위 코드는 실행 환경 혹은 오브젝트의 타입에 따라 오작동 할 수 있습니다.
2. IsA
더보기
IsA함수는 UObject에 있는 함수입니다.
IsA | Unreal Engine Documentation
인자의 여부에 따라서, 해당 객체의 템플릿 여부를 반환합니다.
구체적으로, 아래와 같은 상황에서 사용할 수 있습니다.
아래 예시의 클래스 A, B, C는 언리얼 Actor타입을 상속받은 클래스라 가정합니다. (언리얼 네이밍 컨벤션은 무시합니다.)
- class A가 있습니다.
- A를 상속받은 B와 C가 있습니다. (class B : public A, class C : public A)
- A를 인자로 받는 특정 함수에서, 해당 인스턴스가 B인지 C인지 확인하려 합니다.
void Function(A* ObjA) {
if(A->IsA(B::StaticClass())) {
// Logic ( B : A )
}else{
// Logic ( C : A )
}
}
위 코드를 통해 상속 구조에서 클래스의 포함 여부를 확인할 수 있습니다.
또한 위와 같은 구조 외에도, 언리얼의 기본 타입인 UObject를 상속받는 클래스에 대하여, 해당 클래스의 구체적인 타입을 확인해야 하는 상황에서도 사용할 수 있습니다.
감사합니다.