UDN 링크
어셋 참조
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assets/ReferencingAssets
어셋 로딩
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assets/AsyncLoading/
어셋 강 참조 vs 약 참조
어셋을 참조하는 방식은 강 참조(Strong Reference)와 약 참조(Weak Reference)가 있다.
- 강 참조 : A오브젝트가 B오브젝트를 참조하여 A로드 시 B가 로드되게 하는 방식이다. 오브젝트가 로드될 때 같이 로드되기 때문에 먹는 메모리가 커지고, 로딩 시간도 길어질 수 있다.
- 약 참조 : 경로(Path)같은 문자열 형태의 간접 매커니즘을 통해 A오브젝트가 B오브젝트를 참조하게 만들어 로드하는 방식
강 참조 유형1 - 직접 프로퍼티 참조
변수 선언 후 UPROPERTY 매크로를 통해 에디터에 노출한다. 해당 변수에 참조할 어셋을 끌어다 놓는다.
강 참조 유형2 - 생성 시간에 참조
주어진 프로퍼티에 대해 로드해야하는 어셋을 프로그래머가 정확히 알고 있어, 해당 오브젝트 생성 시 일부분으로 설정하는 경우이다. ConstructorHelpers라는 특수 클래스가 사용되고, 생성 단계 도충 오브젝트나, 오브젝트 클래스를 찾게 해준다.
약 참조 유형1 - 간접 프로퍼티 참조
어셋 로드를 쉽게 제어할 수 있는 방법은 TSoftObjectPtr를 사용하는 것이다. TSoftObjectPtr를 사용하려면 어셋을 수동으로 로드해야 하는데 동기식 방법과 비동기식 방법이 있다.
- 동기식 방법
LoadObject<>()
StaticLoadObject()
FString fileName = TEXT("/Game/TestDataTable.TestDataTable);
auto loadedFile = StaticLoadObject(UDataTable::StaticClass(), NULL, fileName);
StreamManager::LoadSynchronous()
FindOrLoadAssetsByPath()
TArray<UObject> dataFiles;
FindOrLoadAssetsByPath(TEXT("/Game"), dataFiles, EngineUtils::ATL_Regular); - 비동기식 방법
- StreamableManager::RequestAsyncLoad()
- LoadPackageAsync()
약 참조 유형2 - 객체(Object)검색/로드
지금까지는 UPROPERTY 기반이었고, 실행 시간에 String을 만들어 그 객체로의 레퍼런스를 구하는 방법이다. 내부적으로는 FindObject와 동일한 역할이므로, 오브젝트를 먼저 검색한 다음 로드할 필요가 없다.
- 이미 생성되어 있거나 로드되어 있는 UObject만 사용하려는 경우 : FindObject<>()
- 이미 로드되어 있지 않은 오브젝트를 로드하려는 경우 : LoadObject<>()
'게임 개발 > Unreal Engine' 카테고리의 다른 글
[Unreal Engine] 실시간(리얼타임) 렌더링 기초 (28) | 2022.01.02 |
---|---|
[Unreal Engine] 라이팅 효과 & 리플렉션 (30) | 2022.01.02 |
[Unreal Engine] 라이팅(Lighting) (30) | 2021.12.31 |
[Unreal Engine] 라이팅(Lighting) (24) | 2021.12.30 |
[Unreal Engine] 액터의 수명주기(Actor Lifecycle) (30) | 2021.12.29 |