일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Unreal Engine 5
- unreal engine redirection crash
- unreal engine
- UnrealEngine
- unity
- ue4 Crash
- 언리얼
- 리디렉터 크래쉬
- register component
- LittleNightMare
- redirection crash
- deltaTime
- Unreal Engine 4
- change textblock color
- 13iew
- UE
- splinemeshcomponent scale
- ue4 error
- tscriptinterface
- UE5
- Unreal Engine Error
- staticmesh mobility
- UE4
- Random Map Generator
- skill system
- 랜덤 맵 생성
- unreal engine skill
- 리디렉션 크래쉬
- Ai
- redirector crash
- Today
- Total
Class GameDev* SheepAdult
[Unreal Engine 5] TSubclassOf 본문
TSubclassOf는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스이다. 여기서 안전성이란, 사용자가 작업할 때 의도치 않은 클래스를 사용하는 것을 방지해 준다는 말이다. 이 말은 TSubClassOf는 템플릿 클래스이므로 빌드 시점에서 타입 검사가 이루어지기 때문에 런타임 에러의 위험이 없다는 점에서 안전하다는 의미이기도 하다.
보통 TSubclassOf는 EditAnywhere 등과 같이 에디터에서 직접 넣어주는 용도로 사용한다.
// .h
UPROPERTY(EditAnywhere)
TSubclassOf<UUserWidget> TestWidgetClass;
UPROPERTY()
class UTestWidget* TestWidget;
// .cpp
TestWidget = Cast<UTestWidget>(CreateWidget(GetWorld(), TestWidgetClass));
일반적으로 TestWidget을 생성할때 TSubclassOf로 대입된 TestWidgetClass의 클래스를 넣어주는 방식이 사용된다.
그렇다면 여기서 의문은 TestWidgetClass 대신에 TestWidget::StaticClass()를 사용하면 안 되나 하는 의문이 든다. 만약 위젯을 블루프린트로 만들었다면 StaticClass()는 클래스를 불러오는 것이므로 블루프린트는 당연히 사용이 안될 것이다. 모든 작업을 slate 등 C++로 작성했다 하더라도 한 가지 클래스만 지정해서 사용하게 되므로 유연성을 잃을 수 있다.
예를 들어, 하나의 TestWidget에서 여러가지 파생 위젯이 만들어져 있다면, TSubclassOf를 통해서는 원하는 위젯 클래스를 런타임에 동적으로 지정해 줄 수 있는데, StaticClass를 사용하면 if문으로 분기를 만들어주는 등의 방식으로 복잡해질 수 있으며 그로 인해 유연성이 떨어질 수 있다는 말이다.
결론 : TSubclassOf는 안정성을 보장하며 동적 지정을 통해 유연성을 가진다.