레벨별 Preload DataAsset은 유지하되, 수집 기준을 기능 Feature 중심으로 변경했다.
기존 구조의 문제
레벨에 이미 배치된 Static Mesh는 레벨 로드 과정에서 로드되므로 Preload할 필요 없고
그 외에 Preload 해야할 목록들 수정함.
- Inventory에서 드랍될 수 있는 Item Actor / Mesh
- Shelf에서 런타임으로 생성될 Item
- DamageText Pooling에 필요한 Widget / Material
- HUD, Inventory, Quest UI
- AI Blueprint / DataAsset
- Weapon, GE, Item DataAsset
- Shop, Storage, Crafting 관련 UI와 Data
새 구조
LevelPreloadDataAsset
- 레벨별 Preload 진입점
- Level, LevelId 보유
- GeneratedRuntimeAssets 보유
- 선택적으로 InventoryPreloadDataAsset 참조
InventoryPreloadDataAsset
- Inventory Item DataAsset 전용 공용 Preload 목록
- 여러 LevelPreloadDataAsset에서 공유 가능
GeneratedEnvironmentAssets
- 레벨에 배치된 환경 Mesh용 필드
- 현재는 기본적으로 사용하지 않음
GeneratedRuntimeAssets
- Feature 기반으로 자동 수집된 런타임 에셋
AdditionalPreloadAssets
- 사람이 직접 추가하는 예외 에셋
ExcludedAssets
- 자동 수집에서 제외할 에셋
공통 Feature 목록을 따로 두고, Preset은 사용할 Feature 이름을 지정하는 구조로 바꿨다.
만든 Feature를 각 Preset이 자유롭게 조합해 사용할 수 있는 구조를 가지고 있다.
Runtime Feature 수집
Generator는 현재 열린 레벨 이름으로 Preset을 찾는다.
현재 레벨 이름 확인
→ LevelIds에 해당 레벨이 들어간 Preset 검색
→ Preset이 선택한 FeatureNames 확인
→ 각 Feature의 RootDirectories와 DirectAssets 수집
→ GeneratedRuntimeAssets에 저장
Dependency 확장
bExpandRuntimeDependencies 옵션이 켜져 있으면 수집된 Root Asset에서 의존 에셋을 따라가게 했음
Root Asset
→ Hard Dependency
→ Soft Dependency
→ Runtime Asset 목록에 추가
이 과정으로 참조하는 Texture, Material, Font 같은 에셋도 함께 들어온다.
모든 의존성을 무조건 포함하면 Editor Tool이나 불필요한 에셋까지 섞일 수 있으므로 필터가 들어갔다.
레벨에 배치된 Static Mesh를 수집하는 기능은 완전히 삭제하지 않았다.
다만 기본값은 꺼져 있다.
bIncludePlacedEnvironmentAssets = false
이 옵션을 켜면 예전처럼 현재 레벨의 Actor를 순회하면서 StaticMeshComponent, InstancedStaticMeshComponent, HierarchicalInstancedStaticMeshComponent를 스캔할 수 있다.
배치된 환경 Mesh보다 런타임 Feature 에셋을 Preload하는 쪽에 중점을 두었음.
런타임 로딩 흐름
GameFlowSubsystem
→ Loading Level 진입
→ LoadingGameMode 시작
→ 현재 FlowState / Target Level에 맞는 LevelPreloadDataAsset 선택
→ FTAssetManager가 PreloadLevelAssetsAsync 실행
→ 로딩 완료 후 실제 Level Open
수정할 사항
- Load할 Data 중 다음 레벨에 필요없는 Data Load 해제
- 메모리 최적화
- 그 밖에 로드해올 에셋 고려하기
- 플러그인 범용성 고려하기
'TIL' 카테고리의 다른 글
| ABP → AnimInstance 전환 (0) | 2026.07.20 |
|---|---|
| UE Preload (0) | 2026.07.16 |
| IK (0) | 2026.07.14 |
| WorldContextObject (0) | 2026.07.10 |
| Clean Code (0) | 2026.06.09 |