위와같이 사용할때가 있는데 왜 존재하는지 궁금해서 찾아보았습니다.
언리얼 엔진에서 UClass타입 안정성을 보장하는 템플릿 클래스로,
TSubclassOf에 전달된 대상이 꺽쇠괄호(<>)안에 넣어준 템플릿 인자의 타입과 일치하거나 템플릿 인자로 받은 타입을 상속받은 타입인지를 런타임 중에 확인하도록 도와주는 클래스입니다.
위와같은 경우도 그냥 바로 class UUserWidget* HpHud_Class 로 해도 될것같은데 안정성을 위하여 보통 이렇게 쓰는것 같습니다.
TSubclassOf를 사용한는 것과 바로 포인터하는 것의 차이!!!(중요)
UDamageType* dmgType; //인스턴스(이미 생성된 오브젝트)를 가리킴!!!
UClass* DamageType; //클래스를 가리킴
TSubclassOf<UDamageType> DamageType; //클래스를 가리킴
위 코드에서 첫번째, 세번째를 저는 같은 것이라고 생각했는데 전혀 다른것이었습니다.
첫번째 방법(UDamageType* dmgType):
클래스 레퍼런스가 아닌, 이미 생성된 오브젝트를 refenrence하거나 null을 가리킴!
두번째 방법(UClass* DamageType):
새 개체를 만드는 데 사용되지만, 세부 정보 패널에서 클래스를 선택할 수 있는 드롭다운 메뉴를 만듭니다. (아마, 이미 생성된 오브젝트가아닌 생성하기 위해서 어떤 클래스를 가리키는지 알기 위해서 사용하는듯)
세번째 방법(TSubclassOf<UDamageType> DamageType):
TSubclassOf로, 두 번째와 마찬가지로 새 객체를 만드는 데 사용되는 보라색 핀 클래스 변수이지만 편집기의 세부 정보 패널은 UDamage에서 파생된 클래스만 나열합니다.엔진의 모든 클래스를 해당 포인터를 대체할 수 있는 항목으로 나열하는 대신 속성에 대한 선택 항목으로 입력합니다.
출처:https://forums.unrealengine.com/t/solved-how-to-typecast-tsubclassof/277730/9
'언리얼엔진' 카테고리의 다른 글
visible과 edit의 차이 (1) | 2022.09.09 |
---|---|
Mobility(모빌리티) 세팅 (0) | 2022.09.01 |
맵 구성의 기본 ( 레벨(맵) 생성, 하늘, 태양, 대기 ) (0) | 2022.07.21 |
리타겟팅(애니메이션 이전) (0) | 2022.07.21 |
애니메이션 간단히 만드는 법, 컨트롤릭(Control Rig) - 2 (0) | 2022.07.21 |