2024. 3. 28. 17:33ㆍUnity
AssetBundle
- 선택한 에셋을 포함하기 위해 내보낼 수 있는 파일. 어플리케이션에서 요청 시 로드할 수 있다. 게임의 다양한 콘텐츠를 효율적으로 관리하고 다운로드 크기를 최적화하는 데 도움이 된다.
- 메모리를 효율적으로 관리할 수 있다.
- 초기 인스톨 사이즈를 줄일 수 있다.(스토어에 올리기 위해서는 150MB의 용량 제한이 있다.) -> 모바일에서 유용
장점
- 자원 관리와 최적화: AssetBundle은 리소스를 패키징하여 런타임에 동적으로 로드하거나 언로드할 수 있으므로 게임의 자원 관리와 최적화에 도움이 된다. 필요한 리소스만 로드하여 메모리 사용량을 줄이고 성능을 향상시킬 수 있다.
- 동적 업데이트: 게임 또는 애플리케이션을 런타임에 업데이트하거나 새로운 콘텐츠를 추가할 수 있다. 새로운 AssetBundle을 다운로드하여 이를 적용하거나 이전 버전의 AssetBundle을 삭제할 수 있다.
- 크로스 플랫폼 지원: AssetBundle은 크로스 플랫폼에서 사용할 수 있으며, 게임을 여러 플랫폼에 쉽게 배포할 수 있다.
단점
- 추가적인 작업: AssetBundle을 만들기 위해서는 추가적인 작업이 필요하다. 리소스를 AssetBundle로 패키징하고 관리하는 과정이 필요하며, 이는 개발 및 유지보수 시간을 추가적으로 요구할 수 있다.
- 크기 관리: AssetBundle의 크기를 적절히 관리해야 한다. 너무 큰 AssetBundle은 다운로드 시간을 늘릴 수 있고, 사용자에게 부담을 줄 수 있다. 반면에 너무 작은 AssetBundle은 로드 및 언로드 작업이 자주 발생하여 성능에 영향을 줄 수 있다.
매니페스트(Manifest) 파일
manifest 파일은 에셋 번들마다 생성되며 다음의 정보를 포함합니다.
- 매니페스트 파일은 에셋 번들 바로 옆에 위치합니다.
- CRC.
- 에셋 파일 해시. 이 에셋 번들에 포함된 모든 에셋을 위한 단일 해시이며 증분 빌드 체크에만 사용됩니다.
- 타입 트리 해시. 이 에셋 번들에 포함된 모든 타입을 위한 단일 해시이며 증분 빌드 체크에만 사용됩니다.
- 클래스 타입. 이 에셋 번들에 포함된 모든 클래스 타입입니다. 타입 트리 증분 빌드 체크를 실행 시 새로운 단일 해시를 가져오는데 사용됩니다.
- 에셋 이름. 모든 에셋은 명백하게 이 에셋 번들 안에 포함됩니다.
- 종속 에셋 번들 이름. 이 에셋 번들이 종속하는 모든 에셋 번들입니다.
- 매니페스트 파일은 증분 빌드할 경우에만 사용되며 런타임에는 필요하지 않습니다.
https://docs.unity3d.com/kr/530/Manual/BuildingAssetBundles.html
AssetBundle 압축 방식
LZMA
- Asset을 묶어 하나로 저장한다.
- 많은 압축, 하지만 비효율적이다.
- 1번들 1에셋에 적합하다.
LZ4
- Asset을 여러 덩어리로 나눠서 저장한다.
- 권장되는 옵션이다.
최적의 AssetBundle 개수
AssetBundle 수가 적을 경우
- Header가 커져 전부 메모리에 올라가기 때문에 실행 시 메모리 사용량 증가
- 다운로드 양이 증가하므로 업데이트에 좋지 않다.
AssetBundle 수가 많을 경우
- 빌드할 때 Bundle을 모두 검사하기 때문에 시간이 증가
- 에셋들이 흩어져있을 경우 Bundle의 Dependency를 생각해야 하기 때문에 개발이 어려워진다.
- 추가적인 오버헤드 정보들이 많아져서 전체 사이즈가 커지고 다운로드 시간이 증가한다.
AssetBundle에 각각 들어갈 에셋들의 그룹화 팁에 대해서는 아래 글에 잘 나와있다.
https://young-94.tistory.com/11
*AssetBundle의 Memory Profiling은 에디터에서 하는 건 의미가 없고 타겟 기기에서 봐야 한다.