+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!
+ 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!
+ 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~
+ '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.
+ 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!
기본적인 TSoftClassPtr과 TSubclassOf에 대한 기록
Unreal DataTable에서 BP를 기록하는 과정에서 의문이 들어 조사하게 되었다.
TSoftClassPtr<T>
말 그대로 Class의 Soft Pointer라는 뜻으로, 해당 값이 가리키는 데이터는 직접 지정한 template형의 데이터일 것.
그리고 그 데이터는 UClass로, UE4 엔진이 실행될 때, 처음 생성되어 보관되어지는 Unreal Class Meta Data일 것이다.
만약, 한 번도 생성되지 못한 것이라면, LoadSynchronous()를 통해 해당 CDO(Class Default Object)를 생성해줄 수 있다.
Get()은 Load된 UClass를 반환한다. CDO를 반환하는 것일 듯.
해당 데이터형을 사용하려면, Get()이나 LoadSynchronous()를 잘 활용해야할 것이다.
TSubclassOf<T>
이 데이터형은 Type안정성을 위해서 사용하는 경우가 많다.
즉, 값으로 들어오는 클래스 정보는 T를 상속한 Class다 라는 의미를 명확히 할 때, 사용하는 데이터 형이다.
이것도 기본적으로는 내부에 UClass* 데이터를 가지고 있다.
이 클래스의 Get()은 **this를 반환하는데... 기본적인 operator*연산이 Class포인터를 넘기는 작업이니까,
**this는 UClass 원본 데이터를 반환하는게 아닐까 싶다.
호환되는 TSubclassOf 유형을 서로에게 할당하는 연산은 RunTime에 Check하고,
서로 호환되지 않는 TSubclassOf 유형(공통 부모조차 없는 전혀다른 클래스)은 CompileTime에 Check한다.
왜냐하면, 호환되는 유형은 null 값등이 사용될 수 있지만, 서로 호환되지 않는 유형은 Crash를 유발할 수 있기 때문!
T name;
그냥 template형으로, 사용하게되면 CDO와는 다른 인스턴스가 생성되어 메모리에 잡힐 것으로 예상됨.
** 참고사이트 **
- http://egloos.zum.com/sweeper/v/3225016
- https://docs.unrealengine.com/ko/Programming/UnrealArchitecture/TSubclassOf/index.html
- https://docs.unrealengine.com/en-US/API/Runtime/CoreUObject/UObject/TSoftClassPtr/index.html
Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.
'요리 레시피 > Unreal' 카테고리의 다른 글
Widget관련 (UWidget, UUserWidget, UPanelWidget, WidgetTree) (0) | 2020.01.31 |
---|---|
FArchive / FVariant 에 대해서 (불확실) (0) | 2020.01.19 |
[Unreal] GameMode / GameState (0) | 2019.12.23 |