Company
교육 철학

Resource Loading and Caching

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 (리소스 시스템 사용)