Resource Loading and Caching
관련 소스 파일
•
Libraries/GameFramework.dll
•
Libraries/GameFramework.xml
•
Scripts/Editor/Inspector/ResourceComponentInspector.cs
•
Scripts/Runtime/Download/UnityWebRequestDownloadAgentHelper.cs
•
Scripts/Runtime/Download/WWWDownloadAgentHelper.cs
•
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs
•
Scripts/Runtime/Resource/DefaultResourceHelper.cs
•
Scripts/Runtime/Resource/EditorResourceComponent.cs
•
Scripts/Runtime/Resource/ResourceComponent.cs
•
Scripts/Runtime/WebRequest/UnityWebRequestAgentHelper.cs
이 페이지는 Unity Game Framework의 리소스 로딩 및 캐싱 시스템을 문서화하며, 런타임에서 게임 리소스를 로드, 관리, 캐싱하는 유연하고 효율적인 방법을 제공합니다. 리소스 빌드와 패키징에 대한 정보는 Resource Building Pipeline을 참조하세요.
Overview
리소스 로딩 및 캐싱 시스템은 게임 리소스의 로딩, 관리, 언로딩을 처리합니다. 제공하는 기능:
•
여러 리소스 로딩 모드 (Package, Updatable, Updatable While Playing)
•
사용자 정의 가능한 매개변수를 통한 효율적인 리소스 캐싱
•
우선순위를 지원하는 비동기 리소스 로딩
•
자동 리소스 해제를 통한 메모리 관리
•
다양한 리소스 타입을 로드하기 위한 통합 API
출처:
Scripts/Runtime/Resource/ResourceComponent.cs
Scripts/Runtime/Resource/DefaultResourceHelper.cs
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs
Resource System Architecture
리소스 로딩 시스템은 프레임워크 전반에 사용되는 컴포넌트-헬퍼 패턴을 따르며, 인터페이스와 구현을 분리합니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs
Scripts/Runtime/Resource/DefaultResourceHelper.cs
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs
ResourceComponent
ResourceComponent는 Unity에서 리소스 로딩의 주요 진입점입니다. 리소스 시스템을 초기화하고, 로딩 에이전트를 구성하며, 에셋과 씬을 로딩하는 메서드를 제공합니다.
주요 책임:
•
적절한 모드로 리소스 시스템 초기화
•
리소스 헬퍼 및 에이전트 구성
•
리소스 로딩을 위한 API 제공
•
리소스 캐싱 설정 처리
•
에셋/리소스 해제를 통한 메모리 관리
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 19-1302
Resource Mode
프레임워크는 세 가지 리소스 모드를 지원합니다:
모드 | 설명 |
Package | 리소스가 게임 내에 패키징되며 업데이트 불가 |
Updatable | 리소스 업데이트 가능하지만 게임 재시작 필요 |
Updatable While Playing | 게임 실행 중에도 리소스 업데이트 가능 |
Unity 에디터에는 특별한 Editor Resource Mode가 있으며, 에셋 번들이 아닌 AssetDatabase에서 직접 에셋을 로드합니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 40
Scripts/Editor/Inspector/ResourceComponentInspector.cs 22
Scripts/Runtime/Resource/EditorResourceComponent.cs 26-1359
Resource Loading Workflow
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 600-685
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs 140-202
Loading Resources
프레임워크는 다양한 리소스 유형 로딩을 지원합니다:
•
Assets: 프리팹, 텍스처, 오디오 클립 등 게임 에셋
•
Scenes: Unity 씬
•
Binary Data: 설정 파일 등 원시 바이너리 데이터
각 유형에 대해 동기/비동기 로딩 메서드를 제공하며, 콜백과 우선순위를 지정할 수 있습니다.
// 비동기 에셋 로딩 (콜백 포함)
ResourceComponent.LoadAsset<GameObject>(assetName, assetLoadedCallback);
// 우선순위를 지정한 비동기 에셋 로딩
ResourceComponent.LoadAsset<GameObject>(assetName, priority, assetLoadedCallback);
// 비동기 씬 로딩
ResourceComponent.LoadScene(sceneAssetName, sceneLoadedCallback);
C#
복사
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 600-685
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs 139-339
Asset Bundle Loading
에디터가 아닌 모드에서는 리소스가 에셋 번들에서 로드됩니다. 과정:
1.
에셋 번들 파일 읽기 또는 다운로드
2.
에셋 번들 로드
3.
요청된 에셋을 번들에서 로드
4.
이후 사용을 위해 캐싱
이 모든 단계는 시스템이 자동으로 처리하며, 각 단계에서 에러 처리와 콜백을 제공합니다.
출처:
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs 143-201
Scripts/Runtime/Resource/DefaultResourceHelper.cs 30-155
Resource Caching Mechanism
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 52-73
Scripts/Runtime/Resource/EditorResourceComponent.cs 45-46
Asset and Resource Pooling
시스템은 두 개의 별도 풀을 유지합니다:
•
Asset Pool: 로드된 에셋 관리 (예: 텍스처, 모델, 프리팹)
•
Resource Pool: 리소스 컨테이너 관리 (예: 에셋 번들)
각 풀은 구성 가능한 매개변수를 가집니다:
매개변수 | 설명 |
Capacity | 풀의 최대 항목 수 |
Expire Time | 사용되지 않은 항목이 해제될 수 있는 시간 |
Auto Release Interval | 사용되지 않은 항목을 검사/해제하는 주기 |
Priority | 메모리 관리 시 풀의 우선순위 |
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 52-73
Scripts/Editor/Inspector/ResourceComponentInspector.cs 111-212
Auto-Releasing Mechanism
시스템은 다음 기준에 따라 메모리를 자동으로 관리합니다:
•
마지막 사용 시점 이후 시간 (Expire Time)
•
주기적 검사 (Auto Release Interval)
•
시스템 메모리 압박
추가적으로, 수동으로 Unload Unused Assets를 실행할 수 있으며 다음 옵션으로 제어됩니다:
•
Min Unload Unused Assets Interval
•
Max Unload Unused Assets Interval
이 설정들은 메모리 사용량과 로딩 성능의 균형을 맞추는 데 도움을 줍니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 33-36, 215-250
Resource Loading Agents
리소스 로딩은 병렬로 작업하는 여러 로딩 에이전트들에 의해 처리되며, 전체 로딩 성능을 향상시킵니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 96-100
Scripts/Runtime/Resource/DefaultLoadResourceAgentHelper.cs 24-137
Load Agent Configuration
동시에 실행되는 로딩 에이전트 수는 LoadResourceAgentHelperCount 속성을 통해 구성할 수 있습니다.
•
더 많은 에이전트 = 높은 처리량
•
그러나 시스템 자원 소비 증가 가능
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 100
Scripts/Editor/Inspector/ResourceComponentInspector.cs 40
Editor Mode vs Runtime Mode
프레임워크는 에디터와 런타임에서 서로 다른 리소스 로딩 구현을 제공합니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 31
Scripts/Runtime/Resource/EditorResourceComponent.cs 26
Scripts/Editor/Inspector/ResourceComponentInspector.cs 22
Editor Resource Mode
에디터 모드에서는 리소스를 에셋 번들이 아닌 AssetDatabase에서 직접 로드합니다.
특징:
•
AssetDatabase에서 직접 로드
•
선택적으로 에디터에서 에셋 캐싱 가능
•
프레임 예산을 고려한 시뮬레이션 비동기 로딩
출처:
Scripts/Runtime/Resource/EditorResourceComponent.cs 31-46, 482-488
Runtime Resource Modes
런타임 빌드에서는 다음 세 가지 모드 중 하나를 사용합니다:
•
Package Mode: 모든 리소스가 애플리케이션에 번들됨
•
Updatable Mode: 서버에서 리소스를 업데이트 가능 (재시작 필요)
•
Updatable While Playing Mode: 게임 플레이 중에도 리소스를 업데이트/로드 가능
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 40
Scripts/Editor/Inspector/ResourceComponentInspector.cs 22
Resource Download and Update
업데이트 가능한 모드에서는 리소스 다운로드와 업데이트를 처리하는 메커니즘을 제공합니다.
출처:
Scripts/Runtime/Download/UnityWebRequestDownloadAgentHelper.cs 23-243
Scripts/Runtime/Download/WWWDownloadAgentHelper.cs 21-244
Scripts/Runtime/Resource/ResourceComponent.cs 307-373
Resource Downloading Process
업데이트 과정:
1.
버전 리스트를 비교하여 업데이트된 리소스 확인
2.
업데이트된 리소스 다운로드
3.
다운로드된 리소스 검증 (무결성 검사)
4.
다운로드된 리소스 적용
Unity 버전에 따라 다른 다운로드 방식을 사용:
•
UnityWebRequest (최신 Unity 버전)
•
WWW (구버전 Unity)
출처:
Scripts/Runtime/Download/UnityWebRequestDownloadAgentHelper.cs 23-118
Scripts/Runtime/Download/WWWDownloadAgentHelper.cs 21-151
Configuring the Resource System
리소스 시스템은 ResourceComponent 인스펙터를 통해 구성할 수 있습니다:
설정 | 설명 |
Resource Mode | Package, Updatable, Updatable While Playing |
Read-Write Path Type | 다운로드된 리소스를 저장할 위치 |
Asset Auto Release Interval | 사용되지 않은 에셋을 검사하는 주기 |
Asset Capacity | 캐싱할 에셋의 최대 수 |
Asset Expire Time | 사용되지 않은 에셋을 유지하는 시간 |
Resource Auto Release Interval | 사용되지 않은 리소스를 검사하는 주기 |
Resource Capacity | 캐싱할 리소스의 최대 수 |
Resource Expire Time | 사용되지 않은 리소스를 유지하는 시간 |
Update Prefix Uri | 리소스 업데이트의 기본 URL |
Load Resource Agent Helper Count | 동시 로딩 에이전트 수 |
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 40-100
Scripts/Editor/Inspector/ResourceComponentInspector.cs 48-235
Performance Considerations
최적의 리소스 로딩 및 캐싱 성능을 위해:
•
Pool 크기 균형: 에셋/리소스 풀의 용량을 적절히 설정
•
자동 해제 최적화: 게임 요구사항에 따라 자동 해제 주기를 설정
•
적절한 Expire Time: 짧게 하면 메모리 사용 감소, 로딩 시간 증가 가능
•
에이전트 수 조정: 많을수록 처리량 ↑, 오버헤드 ↑
•
적절한 리소스 모드 사용: 요구사항을 충족하는 가장 단순한 모드를 선택
•
에셋 의존성 활용: 자동 의존성 처리를 활용하도록 에셋을 구조화
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 52-73, 318-346
Conclusion
리소스 로딩 및 캐싱 시스템은 런타임에서 게임 리소스를 관리하기 위한 유연하고 효율적인 방법을 제공합니다. 시스템을 이해하고 올바르게 구성함으로써, 개발자는 게임의 메모리 사용, 로딩 시간, 업데이트 기능을 최적화할 수 있습니다.
관련 시스템 정보:
•
Resource Building Pipeline
•
UI System (리소스 시스템 사용)
•
Entity System (리소스 시스템 사용)
•
Scene Management (리소스 시스템 사용)