Asset Bundle | |
비유 | ⦁ 미리 포장된 도시락을 필요할 때 꺼내서 먹는 것 = Asset Bundle은 게임을 빌드할 때 필요한 에셋을 미리 묶어서(포장해서) 저장해두는 방식. ⦁ 학교에 갈 때 미리 싸둔 도시락(Asset Bundle)을 가져가면, 나중에 따로 요리할 필요 없이 바로 먹을 수 있다. ⦁ 하지만 한 번 포장된 도시락을 수정하려면 다시 싸야(빌드해야) 하는 번거로움이 있다. |
정의 | ⦁ Unity에서 특정 에셋(텍스처, 모델, 오디오, 프리팹 등)을 하나의 파일로 패키징하여 배포 및 로드할 수 있도록 하는 시스템. ⦁ 초기 앱 설치 크기를 줄이고, 필요한 에셋만 동적으로 로드하여 메모리 최적화가 가능. ⦁ 앱 업데이트 없이 새로운 콘텐츠를 추가할 수 있는 기능을 제공. |
장점 | ⦁ 앱 크기 감소: 초기 앱 설치 크기를 줄이고, 필요한 에셋만 다운로드하여 저장 공간 절약. ⦁ 동적 로드(Selective Loading): 필요한 순간에만 에셋을 로드하여 메모리 사용량 최적화. ⦁ 온디맨드 콘텐츠 업데이트: 앱 재배포 없이 새로운 에셋을 서버에서 다운로드하여 교체 가능. ⦁ 모듈화 및 유지보수성 향상: 에셋을 독립적인 번들로 분리하여 관리하면, 프로젝트 구조가 깔끔해지고 유지보수가 쉬워짐. ⦁ 플랫폼별 최적화 지원: Android, iOS, PC 등 각 플랫폼에 맞게 에셋 번들을 최적화하여 빌드 가능. ⦁ 서버 배포 가능: 클라우드 또는 CDN을 활용하여 원격에서 에셋을 제공할 수 있음. |
단점 | ⦁ 복잡한 관리: 에셋 번들 간 의존성을 수동으로 관리해야 함. 잘못 구성하면 중복된 에셋이 포함되어 용량이 증가할 수 있음. 버전 관리가 어려워, 변경 사항을 일일이 추적해야 함. ⦁ 메모리 및 로드 문제: 캐싱, 로드, 언로드 로직을 직접 구현해야 하므로 개발 부담 증가. 번들을 언로드하지 않으면 메모 리 누수 발생 가능 → 적절한 메모리 관리 필요. 런타임 로드 오버헤드 발생: 번들을 불러오는 데 시간이 걸릴 수 있음. ⦁ 빌드 및 배포 시간 증가: 에셋 번들을 생성하는 데 시간이 많이 걸릴 수 있으며, 빌드 파이프라인을 최적화하지 않으면 전체 개발 속도가 느려질 수 있음. |
최적화 | ⦁ 번들 크기 최적화: 필요 없는 에셋을 제거하고, 작은 단위로 분할하여 로드. ⦁ 압축 최적화: LZ4/LZMA 압축을 적용하여 로딩 속도와 메모리 사용량 최적화. ⦁ 중복 에셋 제거: 여러 번들에서 동일한 에셋을 공유하도록 설계. ⦁ LOD(Level of Detail) 적용: 거리에 따라 저해상도 모델을 사용하여 렌더링 성능 향상. ⦁ 밉맵(Mipmap) 활용: 텍스처 로딩 최적화로 성능 개선. ⦁ 번들 언로드 전략: 메모리 단편화 방지를 위해 필요 없는 번들은 즉시 언로드. |
고려 사항 | ⦁ 번들 구성 전략: 기능별, 레벨별, 리소스 유형별로 나누어 관리. ⦁ 에셋 종속성 최소화: 번들 간 의존성을 줄여 불필요한 로드 방지. ⦁ 빌드 파이프라인 자동화: 에셋 번들 빌드 프로세스를 자동화하여 오류 발생 가능성을 줄이고 빌드 시간을 단축. ⦁ 버전 관리: 번들의 버전을 체계적으로 관리하여 호환성 문제 방지. ⦁ 다운로드 패턴 최적화: 네트워크 상태를 감안하여 최적의 다운로드 전략 수립. |
모바일 사용 시 고려사항 |
⦁ 메모리 제약: 작은 크기의 번들로 나누고, 불필요한 에셋은 언로드하여 메모리 누수 방지. ⦁ 비동기 로딩: 메인 스레드 블로킹을 최소화하여 원활한 게임플레이 유지. ⦁ 네트워크 관리: 다운로드 진행 상태를 효율적으로 관리하고, 데이터 사용량 고려. ⦁ 압축 최적화: 대역폭 절약을 위해 적절한 압축 형식(Texture Compression, Mesh Compression 등) 사용. |
WebGL 사용 시 고려사항 (브라우저 기반) |
⦁ CORS 정책 고려: 원격 서버에서 에셋 다운로드 시 보안 정책 적용 필요. ⦁ 브라우저 캐싱 활용: 다운로드한 번들을 캐싱하여 중복 다운로드 방지. ⦁ 메모리 제한: WebGL은 메모리 사용이 제한적이므로 불필요한 에셋 즉시 언로드. ⦁ 네트워크 종속성: 온라인 환경을 기본으로 하되, IndexedDB를 활용한 오프라인 지원 가능. |
온라인 필수 여부 | ⦁ 선택적: 에셋 번들은 로컬 저장소에서도 로드 가능하지만, 새로운 콘텐츠 다운로드나 업데이트 시 온라인 연결 필요. ⦁ 캐싱 전략: 다운로드한 에셋을 캐싱하여 중복 다운로드 방지. |
런처(로드) 시간 비교 분석 | ⦁ 중간 로딩 속도 (사전 로드 필요) ⦁ 런처 시간 영향 - 앱 실행 시 필요한 번들을 미리 로드해야 하므로 초반 로딩 시간이 늘어날 수 있음. 하지만 번들이 로드되면 빠르게 사용 가능. - 번들을 압축하면 로딩 속도가 느려질 수 있음 (LZMA 압축). ⦁ 실행 중 로딩 속도 - 번들 크기에 따라 다름, 압축을 최적화하면 비교적 빠른 속도로 로드 가능. - 하지만 메모리에 적재된 후에는 빠르게 사용 가능. |
언제 사용하면 좋을까? | ⦁ 사전 정의된 콘텐츠를 번들로 묶어 로드해야 하는 경우. ⦁ 정적인 DLC, 확장팩, 특정 레벨별 에셋을 필요할 때 로드해야 하는 경우. ⦁ 네트워크 없이도 사용할 수 있도록 로컬에서 로드해야 하는 경우. |
사용 예시 | ⦁ DLC 및 동적 콘텐츠 업데이트: 게임의 확장팩, 캐릭터 스킨, 언어 데이터 등을 추가할 때 활용. ⦁ 대규모 게임에서 레벨별 로딩: 특정 레벨에 필요한 에셋만 로드하여 메모리 사용 최적화. ⦁ 레거시 프로젝트 유지보수: 기존 프로젝트에서 에셋을 관리할 때, 새로운 시스템으로 전환이 어려운 경우. ⦁ 특정 환경에서 커스텀 로딩 파이프라인이 필요한 경우: 세밀한 제어가 필요한 시스템. |
참고 자료 | ⦁ Unity 공식 문서 - AssetBundles: 에셋 번들의 기본 개념, 생성, 로딩 방법 등을 설명. ⦁ Unity Learn - Asset Bundles Tutorial: 에셋 번들 튜토리얼. ⦁ How to create asset bundle in Unity: YouTube 에셋 번들 사용법 영상 튜토리얼. ⦁ Unity 에셋 번들 팁 및 위험 요소: Unity 공식 블로그의 에셋 번들 가이드. |
'Unity > 용어정리' 카테고리의 다른 글
Unity 프로젝트 에셋 관리: CDN (Content Delivery Network) (0) | 2025.05.09 |
---|---|
Unity 프로젝트 에셋 관리: Streaming Assets (스트리밍 에셋) (0) | 2025.05.09 |
Unity 프로젝트 에셋 관리: Addressable Asset (어드레서블 에셋) (0) | 2025.05.09 |
아틀라스(Atlas), 텍스쳐 아틀라스(Texture Atlas), 스프라이트(Sprite) (7) | 2023.04.21 |
오른손 좌표계 & 왼손 좌표계 (Right-hand Coordinate System & Left-hand Coordinate System) (4) | 2023.04.19 |
댓글