일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- bluezone
- unreal engine 5 merge mesh
- 13iew
- Ai
- 언리얼 자기장
- Unity Engine
- tick 사용하지 않고
- UE
- 랜덤 맵 생성
- Chat Server
- Random Map Generator
- deltaTime
- unreal engine
- game ability system
- UnrealEngine
- 아이작 맵 생성
- multithreard chat
- Unreal Engine Error
- UE4
- ue4 Crash
- ue4 error
- 채팅 서버
- draw call skeletal mesh
- UE5
- Unreal Engine 5
- Unreal Engine 4
- unity
- LittleNightMare
- 언리얼
- tick처럼 사용
- 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는 안정성을 보장하며 동적 지정을 통해 유연성을 가진다.