그룹을 에셋 번들로 패킹
그룹 내 에셋을 에셋 번들에 패킹하는 방법을 선택할 때 몇 가지 옵션이 있습니다.
- 그룹에 할당된 모든 어드레서블을 하나의 번들에 함께 패킹할 수 있습니다. 이는 Pack Together 번들 모드에 해당합니다.
- 그룹에 할당된 각 어드레서블을 자체 번들에 개별적으로 패킹할 수 있습니다. 이는 Pack Separately 번들 모드에 해당합니다.
- 동일한 레이블 세트를 공유하는 모든 어드레서블을 자체 번들로 패킹할 수 있습니다. 이는 Pack Together By Label 번들 모드에 해당합니다.
번들 모드에 대한 자세한 내용은 고급 그룹 설정을 참조하십시오.
씬 에셋은 항상 그룹 내 다른 어드레서블 에셋과 별도로 패킹됩니다. 따라서 씬 및 씬과 관련 없는 에셋이 혼합된 그룹은 빌드 시 항상 각각 씬 및 기타 항목을 위한 것으로 번들 두 개 이상을 생성합니다.
어드레서블로 표시된 폴더의 에셋과 스프라이트 시트와 같은 복합 에셋은 각 어드레서블을 개별적으로 패킹하도록 선택할 때 특수한 방식으로 처리됩니다.
- 어드레서블로 표시된 폴더의 모든 에셋은 동일한 폴더에 함께 패킹됩니다(개별적으로 어드레서블로 표시된 폴더의 에셋은 제외).
- 어드레서블 스프라이트 아틀라스의 스프라이트는 동일한 번들에 포함됩니다.
자세한 내용은 Content Packing & Loading 설정을 참조하십시오.
[!참고] 많은 에셋을 같은 그룹에 보관하면 여러 사람이 동일한 프로젝트에서 작업할 때 버전 관리 충돌이 발생할 가능성이 높아질 수 있습니다.
에셋 번들 패킹 전략
콘텐츠를 몇 개의 큰 번들로 패킹할지, 아니면 여러 개의 작은 번들로 패킹할지 여부는 양쪽 모두에 영향을 미칠 수 있습니다.
번들이 너무 많은 경우의 위험성:
- 각 번들에는 메모리 오버헤드가 있습니다. 메모리에 수백 개 또는 수천 개의 번들을 한 번에 로드하면 메모리 사용량이 눈에 띄게 증가할 수 있습니다.
- 번들 다운로드에는 동시성 제한이 있습니다. 한 번에 필요한 번들이 수천 개라면 동시에 모두 다운로드할 수 없습니다. 먼저 일정 수만큼 다운로드되고, 다운로드가 완료되면 더 많은 수만큼 트리거되는 식입니다. 실제로 이는 매우 사소한 문제이며, 번들 수보다는 다운로드의 총 크기에 따라 제한이 걸리는 경우가 많습니다.
- 번들 정보로 인해 카탈로그 크기가 커질 수 있습니다. 카탈로그를 다운로드하거나 로드할 수 있도록 Unity는 번들에 대한 문자열 기반 정보를 저장합니다. 수천 개의 데이터 번들이 있으면 카탈로그의 크기가 크게 증가할 수 있습니다.
- 중복된 에셋이 생길 가능성이 높아집니다. 예를 들어 두 개의 머티리얼이 어드레서블로 표시되어 있고 각각 동일한 텍스처에 종속된 경우입니다. 동일한 번들에 있는 경우 텍스처를 한 번 가져와서 둘 다 참조합니다. 별도의 번들에 있고 텍스처 자체가 어드레서블이 아닌 경우 텍스처가 중복됩니다. 그런 다음 텍스처를 어드레서블로 표시하거나, 복제를 허용하거나, 머티리얼을 같은 번들에 넣어야 합니다. 자세한 내용은 에셋 및 에셋 번들 종속성을 참조하십시오.
번들이 너무 적은 경우의 위험성:
- (Unity가 다운로드에 사용하는) UnityWebRequest는 실패한 다운로드를 다시 시작하지 않습니다. 따라서 대규모 번들이 다운로드 중이며 사용자 연결이 끊어진 경우 연결이 회복되면 다운로드가 다시 시작됩니다.
- 항목은 번들에서 개별적으로 로드할 수 있지만 개별적으로 언로드할 수는 없습니다. 예를 들어, 번들에 10개의 머티리얼이 있고 10개를 모두 로드한 다음 어드레서블이 그 중 9개를 해제하도록 설정하면 10개 모두 메모리에 있을 가능성이 높습니다. 자세한 내용은 메모리 관리를 참조하십시오.
프로젝트 규모 확대가 규모에 미치는 영향
프로젝트 규모가 커짐에 따라 에셋 및 번들의 다음 측면에 유의해야 합니다.
- Total bundle size: Unity는 지금까지 4GB가 넘는 파일을 지원하지 않았습니다. 일부 최신 에디터 버전에서는 이 문제가 해결되었지만 여전히 문제가 있을 수 있습니다. 모든 플랫폼에서 최상의 호환성을 얻으려면 특정 번들의 콘텐츠를 이 제한 이하로 유지해야 합니다.
- Bundle layout at scale: 콘텐츠 빌드에서 생성되는 에셋 번들의 수와 해당 번들의 크기 사이의 메모리 및 성능 균형은 프로젝트가 커지면서 달라질 수 있습니다.
- Bundle dependencies: 어드레서블 에셋이 로드되면 해당 번들 종속성도 모두 로드됩니다. 어드레서블 그룹을 생성할 때는 에셋 간 레퍼런스에 유의하십시오. 자세한 내용은 에셋 및 에셋 번들 종속 관계를 참조하십시오.
- Sub assets affecting UI performance: 여기에는 엄격한 제한이 없지만, 에셋이 많고 그에 대한 서브 에셋도 많은 경우 서브 에셋 표시를 비활성화하는 것이 가장 좋을 수 있습니다. 이 옵션은 Groups 창에 데이터가 표시되는 방식에만 영향을 미치며, 런타임에 로드할 수 있는 항목과 로드할 수 없는 항목에는 영향을 미치지 않습니다. 이 옵션은 Groups 창의 Tools> Show Sprite and Subobject Addresses 아래에서 사용할 수 있습니다. 이 옵션을 비활성화하면 UI의 응답성이 향상됩니다.
- Group hierarchy display: 규모 확장에 도움이 되는 또 다른 UI 전용 옵션은 Group Hierarchy with Dashes 입니다. 이 옵션은 최상위 수준 설정의 인스펙터에서 사용할 수 있습니다. 이 옵션을 활성화하면 이름에 대시
-
가 포함된 그룹은 대시가 폴더 계층 구조를 나타내는 것처럼 표시됩니다. 이는 실제 그룹 이름이나 빌드 방식에는 영향을 미치지 않습니다. 예를 들어,x-y-z
및x-y-w
라는 두 그룹은x
라는 폴더 안에y
라는 폴더가 있는 것처럼 표시됩니다. 이 폴더 안에는x-y-z
와x-y-w
라는 두 그룹이 있습니다. 이는 UI 응답성에 영향을 미치지 않으면서도 단순히 많은 그룹 컬렉션을 더 쉽게 탐색할 수 있도록 해 줍니다.