TSubclassOf 는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스입니다.
예를 들어 디자이너가 대미지 유형을 지정하도록 해주는 프로젝타일 클래스를 제작중이라 가정합시다.
그냥 UPROPERTY 유형의 UClass 를 만든 다음 디자이너가 항상 UDamageType 파생 클래스만 할당하기를 바라거나, TSubclassOf 템플릿을 사용하여 선택지를 제한시킬 수도 있습니다. 그 차이점은 아래 코드와 같습니다:
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;
Vs.
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
TSubclassOf<UDamageType> DamageType;
두 번째 선언에서, 템플릿 클래스는 에디터의 프로퍼티 창에 UDamageType 파생 클래스만 선택되도록 합니다.
첫 번째 선언에서는 아무 UClass 나 선택할 수 있습니다. 아래 그림에서 확인됩니다.
이러한 UPROPERTY 안전성에 추가로, C++ 수준에서의 유형 안전성도 확보할 수 있습니다.
비호환 TSubclassOf 유형을 서로에게 할당하려는 순간, 컴파일 오류가 나게 됩니다.
범용 UClass 를 할당하려는 경우, 할당이 가능한지 검증하는 실행시간 검사를 합니다. 실행시간 검사가 실패하면,
결과값은 nullptr 입니다.
* TSubclassOf 템플릿 클래스를 이용해 특정 멤버 변수나 변수를 특정 UObject/UClass의 하위 클래스로 한정지을 수 있다.
이를 통해, 관련없는 녀석이 들어와 런타임 에러를 낸다거나 하는 실수를 사전에 방지할 수 있다.
특히 프로그래머가 아닌 기획/아트에게 제공되는 블루프린트에 노출되는 변수일수록 중요한 타입 제약이라 할 수 있다.
// HUD 화면에 사용할 위젯 클래스
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Power, meta = (BlueprintProtected = "true"))
TSubclassOf<UUserWidget> HUDWidgetClass;
'Unreal > Concept' 카테고리의 다른 글
언리얼 게임실행 프로세스 (0) | 2019.05.12 |
---|---|
각종 포인터 얻어오기 (0) | 2019.05.12 |
UClass (0) | 2019.05.09 |
UFUNCTION 지정 매크로 (0) | 2019.05.01 |
UPROPERTY, UCLASS, category, meta ,Transient 지정 매크로 (0) | 2019.05.01 |