Company
교육 철학

Resource Management System

Resource Management System

관련 소스 파일
Libraries/GameFramework.dll
Libraries/GameFramework.xml
Scripts/Editor/Inspector/ResourceComponentInspector.cs
Scripts/Editor/ResourceBuilder/ResourceBuilder.cs
Scripts/Editor/ResourceBuilder/ResourceBuilderController.BuildReport.cs
Scripts/Editor/ResourceBuilder/ResourceBuilderController.cs
Scripts/Editor/ResourcePackBuilder/ResourcePackBuilder.cs
Scripts/Editor/ResourcePackBuilder/ResourcePackBuilderController.cs
Scripts/Runtime/Resource/EditorResourceComponent.cs
Scripts/Runtime/Resource/ResourceComponent.cs
리소스 관리 시스템은 게임 자산의 로딩, 캐싱, 업데이트를 관리하는 Game Framework의 핵심 컴포넌트입니다. 이 시스템은 에셋 번들 관리, 버전 관리, 핫 업데이트와 같은 내부 복잡성을 처리하면서, 리소스를 로딩하기 위한 통합된 인터페이스를 제공합니다. 다양한 배포 시나리오에서 효율적인 리소스 처리를 위해 필수적입니다.
특정 리소스 유형(예: UI 폼)을 로딩하는 방법은 UI System, 게임 엔티티를 관리하는 방법은 Entity System을 참조하세요.

System Architecture

리소스 관리 시스템은 Game Framework 전반에서 사용되는 컴포넌트-헬퍼 패턴을 따르며, Unity와 직접 연결된 컴포넌트와 내부 프레임워크 구현 간의 명확한 분리를 유지합니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 24-69
Scripts/Runtime/Resource/EditorResourceComponent.cs 26-42

Resource Modes

프레임워크는 다양한 배포 시나리오를 처리하기 위해 세 가지 리소스 모드를 제공합니다:
모드
설명
사용 사례
Package
리소스가 게임과 함께 패키징되며 업데이트 불가
고정 콘텐츠를 가진 단순한 게임
Updatable
게임 시작 전에 리소스를 업데이트 가능
정기적인 콘텐츠 업데이트가 필요한 게임
Updatable While Playing
게임 실행 중에도 리소스를 업데이트 가능
빈번한 콘텐츠 변경이나 대규모 콘텐츠 라이브러리를 가진 게임
출처:
Scripts/Editor/Inspector/ResourceComponentInspector.cs 22-76
Scripts/Runtime/Resource/ResourceComponent.cs 39-40

Component Configuration

ResourceComponent는 여러 가지 구성 가능한 속성을 가지고 있습니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 39-100
Scripts/Editor/Inspector/ResourceComponentInspector.cs 24-41

Resource Building Pipeline

런타임에서 리소스를 로드하기 전에, 원본 에셋들은 최적화된 패키지로 변환되는 리소스 빌드 파이프라인을 거쳐야 합니다.
리소스 빌드 과정은 다음 단계로 구성됩니다:
리소스 수집: 리소스 수집 설정에 따라 에셋을 모음
리소스 분석: 에셋 간의 의존성을 분석
에셋 번들 빌드: 설정 가능한 압축 옵션을 사용해 에셋 번들을 빌드
버전 리스트 생성: 런타임 리소스 관리를 위한 버전 리스트 생성
출처:
Scripts/Editor/ResourceBuilder/ResourceBuilderController.cs 42-317
Scripts/Editor/ResourceBuilder/ResourceBuilder.cs 39-87

Resource Loading

런타임에서 리소스는 메모리 사용과 성능을 최적화하기 위한 다단계 과정을 통해 로드됩니다.
ResourceComponent가 제공하는 주요 메서드:
HasAsset: 에셋 존재 여부 확인
LoadAsset: 콜백을 통해 에셋을 비동기 로드
LoadScene: 콜백을 통해 Unity 씬 로드
UnloadAsset: 더 이상 필요하지 않은 에셋 언로드
UnloadScene: 더 이상 필요하지 않은 씬 언로드
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 1102-1517

Resource Update System

UpdatableUpdatableWhilePlaying 모드에서는 리소스 업데이트를 확인하고 다운로드할 수 있는 메커니즘을 제공합니다.
주요 업데이트 메서드:
CheckVersion: 새 버전이 있는지 확인
CheckUpdate: 업데이트가 필요한 리소스를 확인
UpdateResources: 리소스를 다운로드 및 업데이트
UpdateResourceGroup: 그룹 단위로 리소스를 업데이트
출처:
Scripts/Runtime/Resource/ResourceComponent.cs 762-1021

Resource Pack Building

출시 이후 업데이트를 위해, Resource Pack Builder는 변경된 파일만 포함하는 컴팩트한 리소스 패키지를 생성할 수 있습니다.
리소스 팩 설정 옵션:
플랫폼 타겟팅
압축 옵션
크기 제한
백업 설정
출처:
Scripts/Editor/ResourcePackBuilder/ResourcePackBuilderController.cs 20-318
Scripts/Editor/ResourcePackBuilder/ResourcePackBuilder.cs 18-49

Editor Mode vs Runtime Mode

프레임워크는 개발과 배포 환경에서 서로 다른 리소스 관리 구현을 제공합니다:
EditorResourceComponent
개발 중에는 Unity 프로젝트에서 직접 에셋을 로드하여 에셋 번들 빌드가 필요하지 않습니다.
ResourceComponent
빌드된 게임에서는 선택된 리소스 모드에 따라 리소스 로딩을 관리하며, 에셋 번들, 버전 관리, 업데이트를 처리합니다.
출처:
Scripts/Runtime/Resource/EditorResourceComponent.cs 26-42
Scripts/Runtime/Resource/ResourceComponent.cs 24-40

Resource Building Reports

리소스 빌더는 빌드 정보를 추적하기 위한 상세 리포트를 생성합니다.
빌드 리포트에는 디버깅 및 최적화에 유용한 정보가 포함됩니다:
리소스 크기 통계
의존성 맵
압축 결과
빌드 에러 및 경고
출처:
Scripts/Editor/ResourceBuilder/ResourceBuilderController.BuildReport.cs 20-274

Best Practices

게임 배포 요구사항에 맞는 적절한 리소스 모드를 선택할 것
관련 리소스를 그룹화하여 더 효율적인 로딩과 업데이트를 할 것
게임의 메모리 제약에 맞춰 적절한 캐시 크기를 설정할 것
개발 중 리소스 로딩 성능을 모니터링할 것
초기 다운로드 크기를 최소화하기 위해 리소스 업데이트 기능을 적절히 활용할 것

Conclusion

리소스 관리 시스템은 게임 자산의 생애주기를 전반적으로 처리하기 위한 강력한 프레임워크를 제공합니다. 리소스 로딩을 특정 에셋 유형과 분리함으로써, UI, Entity, Scene 시스템 같은 컴포넌트들은 각자의 기능에 집중하면서 공통된 리소스 인프라를 활용할 수 있습니다.
출처:
Scripts/Runtime/Resource/ResourceComponent.cs
Scripts/Runtime/Resource/EditorResourceComponent.cs
Scripts/Editor/ResourceBuilder/ResourceBuilderController.cs
Scripts/Editor/ResourcePackBuilder/ResourcePackBuilderController.cs