콘텐츠 패킹 및 로딩 스키마 레퍼런스
콘텐츠 패킹 및 로딩 스키마는 기본 빌드 스크립트에서 사용되는 기본 어드레서블 스키마로, 어드레서블 에셋의 빌드 및 로드에 대한 설정을 정의합니다.
콘텐츠 패킹 및 로딩 스키마를 열려면 Addressables Groups 창(Window > Asset Management > Addressables > Groups)을 연 다음 그룹을 선택합니다. 그룹의 설정은 인스펙터에 표시됩니다.
빌드 및 로드 경로
빌드 및 로드 경로 설정은 콘텐츠 빌드에 대한 아티팩트가 생성되는 위치와 어드레서블 시스템이 런타임에 해당 아티팩트를 찾아야 하는 위치를 정합니다.
빌드 및 로드 경로
프로퍼티 | 설명 | |
---|---|---|
Build & Load Paths | 어드레서블 빌드 시스템이 그룹에 대한 아티팩트를 생성하는 위치와 해당 아티팩트를 런타임에 로드하는 위치를 정의하는 프로파일 경로 페어입니다. 목록에서 경로 페어를 선택하거나, 빌드 및 로드 경로를 별도로 설정하려는 경우 <custom> 을 선택합니다. |
|
Build Path Load Path Build & Load Paths 를 <custom> 으로 설정한 경우에만 사용할 수 있습니다. |
어드레서블 빌드 시스템이 이 그룹에 대한 아티팩트를 생성하거나 그룹의 빌드 아티팩트를 로드하는 위치를 정의하는 프로파일 변수입니다. 커스텀 문자열을 설정할 수도 있습니다. 다음 중 하나를 사용합니다. | |
LocalBuildPath | 애플리케이션 설치의 일부로 배포하려는 에셋에 사용합니다. | |
RemoteBuildPath | Unity Cloud Content Delivery 또는 기타 콘텐츠 전송 네트워크와 같은 원격 호스팅 서비스를 사용하여 배포하려는 에셋에 사용합니다. | |
Custom | 이 그룹에 대한 경로로 문자열을 지정합니다. |
빌드 및 로드 경로 옵션은 프로파일의 변수에 의해 정의됩니다. 특정 목적에 맞는 변수만 설정에 사용해야 합니다. 예를 들어 빌드 경로 설정에 로드 경로 변수를 선택하면 유의미한 결과를 얻을 수 없습니다.
프로파일 변수를 선택하면 __Path Preview__에 경로의 프리뷰가 표시됩니다. {UnityEngine.AddressableAssets.Addressable.RuntimePath}
와 같이 중괄호로 묶인 경로의 컴포넌트는 런타임에 최종 경로를 구성하는 데 정적 변수가 사용됨을 나타냅니다. 경로의 해당 부분은 런타임에 어드레서블 시스템이 초기화될 때 정적 변수의 현재 값으로 대체됩니다.
[!경고] 일반적으로 로컬 빌드 또는 로드 경로를 기본값에서 바꾸면 안 됩니다. 바꾼 경우 플레이어 빌드를 생성하기 전에 로컬 빌드 아티팩트를 커스텀 빌드 위치에서 프로젝트의
StreamingAssets
폴더로 복사해야 합니다. 또한 이러한 경로를 변경하면 플레이어 빌드의 일부로 어드레서블을 빌드할 수 없습니다.
고급 옵션
Advanced Options 섹션
프로퍼티 | 설명 |
---|---|
Asset Bundle Compression | 그룹에서 생성된 모든 번들에 대한 압축 유형입니다. 일반적으로 LZ4가 가장 효율적인 옵션이지만 특정 상황에서는 다른 옵션이 더 효과적일 수 있습니다. 자세한 내용은 에셋 번들 압축을 참조하십시오. |
Include In Build | 이 프로퍼티를 활성화하면 콘텐츠 빌드에 이 그룹의 에셋을 포함할 수 있습니다. |
Force Unique Provider | 이 그룹에 대해 Resource Provider 클래스의 고유 인스턴스를 사용하려면 이 프로퍼티를 활성화합니다. 이 그룹의 에셋 유형에 대한 커스텀 제공자 구현이 있고 해당 제공자의 인스턴스를 그룹 간에 공유해서는 안 되는 경우 이 옵션을 활성화하십시오. |
Use Asset Bundle Cache | 이 프로퍼티를 활성화하면 원격으로 배포된 번들을 캐시합니다. |
Asset Bundle CRC | 이 프로퍼티를 활성화하면 번들을 로드하기 전에 번들의 무결성을 검증합니다. 자세한 내용은 에셋 번들 CRC를 참조하십시오. • Disabled: 번들 무결성을 확인하지 않습니다. • Enabled, Including Cached: 번들 무결성을 항상 확인합니다. • Enabled, Excluding Cached: 다운로드 시 번들 무결성을 확인합니다. |
Use UnityWebRequest for Local Asset Bundles | 이 프로퍼티를 활성화하면 AssetBundle.LoadFromFileAsync 대신 UnityWebRequestAssetBundle.GetAssetBundle 을 사용해서 이 그룹에서 로컬 에셋 번들 아카이브를 로드합니다. |
Request Timeout | 원격 번들을 다운로드하기 위한 타임아웃 간격입니다. |
Use Http Chunked Transfer | 이 프로퍼티를 활성화하면 번들을 다운로드할 때 HTTP/1.1 chunked-transfer 인코딩 메서드를 사용합니다. Unity 2019.3 이상 버전에서는 지원 중단 및 무시됩니다. |
Http Redirect Limit | 번들을 다운로드할 때 허용되는 리디렉션 수입니다. -1로 설정하면 제한이 없습니다. |
Retry Count | 실패한 다운로드를 다시 시도하는 횟수입니다. |
Include Addresses in Catalog | 이 프로퍼티를 활성화하면 카탈로그에 주소 문자열을 포함할 수 있습니다. 주소 문자열을 사용하여 그룹에 있는 에셋을 로드하지 않는 경우 이 프로퍼티를 비활성화하여 카탈로그의 크기를 줄일 수 있습니다. |
Include GUIDs in Catalog | 이 프로퍼티를 활성화하면 카탈로그에 GUID 문자열을 포함할 수 있습니다. AssetReference 를 포함하는 에셋에 액세스하려면 GUID 문자열을 포함해야 합니다. AssetReference 또는 GUID 문자열을 사용하여 그룹에 있는 에셋을 로드하지 않는 경우 이 프로퍼티를 비활성화하여 카탈로그의 크기를 줄일 수 있습니다. |
Include Labels in Catalog | 이 프로퍼티를 활성화하면 카탈로그에 레이블 문자열을 포함할 수 있습니다. 레이블을 사용하여 그룹에 있는 에셋을 로드하지 않는 경우 이 프로퍼티를 비활성화하여 카탈로그의 크기를 줄일 수 있습니다. |
Internal Asset Naming Mode | 에셋 번들에서 에셋 ID를 결정하고 번들에서 에셋을 로드하는 데 사용됩니다. 이 값은 에셋 위치의 internalId 로 사용됩니다. 이 설정을 변경하면 번들 CRC 및 해시 값에 영향이 발생합니다. 경고: 콘텐츠 상태 파일에 저장된 데이터가 무효화되니 콘텐츠 업데이트 빌드 설정을 수정하지 마십시오. 다음과 같이 다양한 모드가 있습니다. - Full Path: 프로젝트의 에셋에 대한 경로입니다. 필요한 경우 ID로 로드 중인 에셋을 식별할 수 있으므로 개발 중에 권장됩니다. - Filename: 에셋의 파일 이름입니다. 에셋을 식별하는 데 사용할 수도 있습니다. 참고: 여러 에셋에 동일한 이름을 지정할 수 없습니다. - GUID: 에셋의 결정론적 값입니다. - Dynamic: 그룹의 에셋을 기반으로 구성할 수 있는 가장 짧은 ID입니다. 에셋 번들 및 카탈로그의 데이터 양을 줄이고 런타임 메모리 오버헤드를 낮출 수 있으므로 릴리스에 권장됩니다. |
Internal Bundle Id Mode | 에셋 번들이 내부에서 식별되는 방식을 정합니다. 이는 에셋 번들이 다른 번들에 포함된 종속성을 찾는 방식에 영향을 미칩니다. 이 값을 변경하면 이 번들 및 이 번들을 참조하는 다른 모든 번들의 CRC와 해시에 영향이 발생합니다. 경고: 콘텐츠 상태 파일에 저장된 데이터가 무효화되니 콘텐츠 업데이트 빌드 설정을 수정하지 마십시오. 다음과 같이 다양한 모드가 있습니다. - Group Guid: 그룹의 고유 식별자입니다. 이 모드는 변경되지 않으므로 권장됩니다. - Group Guid Project Id Hash: 클라우드 서비스가 활성화된 경우 Group GUID와 Cloud Project ID의 조합을 사용합니다. 이는 프로젝트가 다른 Cloud Project ID에 바인딩된 경우 변경됩니다. 이 모드는 여러 프로젝트 간에 에셋을 공유할 때 권장됩니다. 구성된 ID가 프로젝트 간에 결정론적이고 고유하기 때문입니다. - Group Guid Project Id Entries Hash: Group GUID, Cloud Project ID(클라우드 서비스가 활성화된 경우), 그룹 에셋 엔트리의 조합을 사용합니다. 이 모드를 사용하면 번들 캐시 버전 문제가 발생할 수 있습니다. 엔트리를 추가하거나 제거하면 해시가 달라집니다. |
Cache Clear Behavior | 설치된 애플리케이션이 캐시에서 에셋 번들을 지우는 시기를 결정합니다. |
Bundle Mode | 이 그룹의 에셋을 번들로 패킹하는 방법을 설정합니다. - Pack Together: 모든 에셋을 포함하는 단일 번들을 생성합니다. - Pack Separately: 그룹의 각 주요 에셋에 대한 번들을 생성합니다. 스프라이트 시트의 스프라이트와 같은 서브 에셋이 함께 패킹됩니다. 그룹에 추가된 폴더의 에셋도 함께 패킹됩니다. - Pack Together by Label: 동일한 레이블 조합을 공유하는 에셋에 대한 번들을 생성합니다. |
Bundle Naming Mode | 에셋 번들의 파일 이름을 구성하는 방법을 설정합니다. - Filename: 파일 이름은 그룹 이름에서 파생되는 문자열입니다. 여기에는 해시가 추가되지 않습니다. - Append Hash to Filename: 파일 이름은 번들 해시가 추가된 그룹 이름에서 파생되는 문자열입니다. 번들 해시는 번들의 콘텐츠를 사용하여 계산됩니다. - Use Hash of AssetBundle: 파일 이름은 번들 해시입니다. - Use Hash of Filename: 파일 이름은 그룹 이름에서 파생되는 문자열을 통해 계산되는 해시입니다. |
Asset Load Mode | 에셋을 요청할 때 개별적으로 로드할지(기본값), 아니면 항상 그룹의 모든 에셋을 함께 로드할지 설정합니다. 대부분의 경우 Requested Asset and Dependencies 를 사용하는 것이 좋습니다. 자세한 내용은 에셋 로드 모드를 참조하십시오. |
Asset Provider | 어드레서블이 이 그룹에서 생성된 에셋 번들에서 에셋을 로드할 때 사용하는 Provider 클래스를 정의합니다. 에셋 번들에서 에셋을 제공하는 커스텀 제공자 구현이 없는 경우 이 옵션을 Assets from Bundles Provider 로 설정합니다. |
Asset Bundle Provider | 어드레서블이 이 그룹에서 생성된 에셋 번들을 로드할 때 사용하는 Provider 클래스를 정의합니다. 에셋 번들을 제공하는 커스텀 제공자 구현이 없는 경우 이 옵션을 AssetBundle Provider 로 설정합니다. |
에셋 번들 압축
어드레서블은 번들 압축을 위한 세 가지 옵션을 제공합니다.
- Uncompressed: 이 옵션은 디스크 용량이 가장 크고 로드 속도도 가장 빠릅니다. 애플리케이션에 여유 공간이 있다면 로컬 콘텐츠에 이 옵션을 사용하는 것을 고려하십시오. 압축되지 않은 번들의 장점은 패치를 처리하는 방식입니다. 자체적으로 패치를 제공하는 플랫폼용으로 개발하는 경우, 압축되지 않은 번들이 가장 정확한(가장 작은) 패치를 제공합니다. 다른 압축 옵션을 사용하면 패치 크기가 다소 커집니다.
- LZ4: Uncompressed 옵션을 사용할 수 없는 경우, 다른 모든 로컬 콘텐츠에 LZ4를 사용해야 합니다. 이는 청크 기반 압축으로, 파일 전체를 로드할 필요 없이 일부만 로드할 수 있는 기능을 제공합니다.
- LZMA: 모든 원격 콘텐츠에 LZMA를 사용하되 로컬 콘텐츠에는 사용하지 마십시오. 가장 작은 번들 크기를 제공하지만 로드 속도가 느립니다. 로컬 번들을 LZMA로 저장하면 더 작은 플레이어를 만들 수 있지만, 로드 시간이 Uncompressed 또는 LZ4보다 훨씬 더 오래 걸립니다. 다운로드한 번들의 경우, LZMA는 다운로드한 번들을 에셋 번들 캐시에 저장할 때 재압축하여 로드 시간이 느려지지 않게 합니다. 기본적으로 번들은 LZ4 압축으로 캐시에 저장됩니다.
압축을 설정하려면 각 그룹에서 고급 설정을 사용합니다. 압축은 로드된 콘텐츠의 메모리 내 크기에 영향을 주지 않습니다.
[!참고] LZMA 에셋 번들 압축은 WebGL의 에셋 번들에 사용할 수 없습니다. 대신 LZ4 압축을 사용할 수 있습니다. 자세한 WebGL 에셋 번들 정보는 WebGL 프로젝트 빌드 및 실행을 참조하십시오.
하드웨어 플랫폼이라고 해서 압축되지 않은 번들이 항상 가장 빠르게 로드되는 것은 아닙니다. 압축되지 않은 번들의 최대 로딩 속도는 IO 속도에 의해 제한되는 반면, LZ4 압축 번들의 로딩 속도는 하드웨어에 따라 IO 속도 또는 CPU에 의해 제한됩니다.
대부분의 플랫폼에서 LZ4 압축 번들 로딩은 CPU 바운드이며 압축되지 않은 번들 로딩이 더 빠릅니다. IO 속도가 느리고 CPU 속도가 빠른 플랫폼에서는 LZ4 로딩이 더 빠를 수 있습니다. 성능 분석을 실행하여 게임이 일반적인 패턴에 맞는지 또는 고유한 조정이 필요한지 확인하는 것이 가장 좋습니다.
Unity의 압축 옵션에 대한 자세한 내용은 에셋 번들 압축 매뉴얼 페이지를 참조하십시오.
에셋 번들 CRC
상황에 따라 서로 다른 CRC 설정을 사용하는 것이 가장 좋습니다. 파일의 변경 사항을 확인하려면 전체 에셋 번들의 압축을 해제하고 압축되지 않은 바이트에서 검사를 처리해야 합니다. 이는 성능에 부정적인 영향을 미칠 수 있습니다.
디스크 스토리지는 일반적으로 안정적이며 디스크에 저장한 후에는 파일이 손상될 가능성이 낮기 때문에 다운로드 중에만 손상이 발생하기 쉽습니다. 에셋 번들에 설정 값과 같이 조작될 수 있는 데이터가 포함된 경우, 저장된 에셋 번들에 대해 CRC 검사를 활성화하는 것을 고려해 볼 수 있습니다.
로컬 에셋 번들에서 애플리케이션 다운로드가 디스크에 저장하기 전에 다운로드 확인을 수행하는 경우, 다운로드가 이미 확인되었으므로 이 프로퍼티를 Disabled 로 설정하는 것이 좋습니다.
원격 에셋 번들의 경우 Enabled, Excluding cache 를 기본값으로 설정하는 것이 좋습니다. 에셋 번들을 디스크에 다운로드하고 캐싱하는 경우 파일 저장 도중에 바이트의 압축이 해제되고 CRC 계산이 수행됩니다. 이는 성능에 영향을 미치지 않으며, 다운로드 시 이 단계에서 손상이 발생할 가능성이 가장 높습니다. 설정 값과 같이 매번 데이터를 확인해야 하는 경우 Including cache 를 사용하는 것이 좋습니다.
에셋 로드 모드
대부분의 플랫폼 및 콘텐츠 컬렉션의 경우 Requested Asset and Dependencies 를 사용해야 합니다. 이 모드는 LoadAssetAsync
또는 LoadAssetsAsync
로 요청된 에셋에 필요한 항목만 로드합니다. 오브젝트는 번들 파일에 표시되는 순서대로 로드되므로 동일한 파일을 여러 번 읽게 될 수 있습니다. 어드레서블 빌드 설정에서 Contiguous Bundles 옵션을 활성화하면 추가 파일 읽기 횟수를 줄일 수 있습니다.
이렇게 하면 사용되지 않는 에셋이 메모리에 로드되는 상황을 방지할 수 있습니다.
로딩 화면과 같이 함께 패킹된 모든 에셋을 로드하는 상황에서의 성능입니다. 대부분의 콘텐츠 유형은 Requested Asset and Dependencies 모드를 사용하여 각각 개별적으로 로드할 때 성능이 비슷하거나 더 향상됩니다. 이 모드는 전체 번들 파일을 순차적으로 읽으므로 일부 플랫폼에서는 이 모드가 더 바람직할 수 있습니다.
[!참고] 아래 예는 데스크톱 및 모바일 플랫폼에 적용됩니다. 성능은 플랫폼마다 다를 수 있습니다. 하드웨어 및 메모리 읽기 제한으로 인해 Nintendo Switch에서는 일반적으로 All Packed Assets and Dependencies 모드가 에셋을 개별적으로 로드하는 것보다 더 나은 성능을 제공합니다. 특정 콘텐츠 및 플랫폼에 대한 로딩 성능을 프로파일링하여 애플리케이션에 적합한 방법을 확인해야 합니다.
로드 성능은 콘텐츠 유형에 따라 다를 수 있습니다. 예를 들어 다른 직렬화된 데이터를 직접 참조하는 프리팹이나 스크립터블 오브젝트와 같이 직렬화된 데이터가 많은 경우, All Packed Assets and Dependencies 를 사용하면 로딩 속도가 빨라집니다. 텍스처와 같은 기타 에셋의 경우 각 에셋을 개별적으로 로드하면 성능이 더 좋아지는 경우가 많습니다.
동기식 어드레서블을 사용하는 경우 에셋 로드 모드 간 성능 차이가 거의 없습니다. 콘텐츠가 동기식으로 로드될 것을 알고 있는 경우 유연성을 높이기 위해 Requested Asset and Dependencies 를 사용해야 합니다.
All Packed Assets and Dependencies 를 사용하여 첫 번째 에셋을 로드하면 모든 에셋이 메모리에 로드됩니다. 이후 LoadAssetAsync
가 해당 팩의 에셋을 호출하면 그때 로드할 필요 없이 미리 로드된 에셋이 반환됩니다.
All Packed Assets and Dependencies 옵션을 사용하면 그룹의 모든 에셋과 종속성이 메모리에 로드되지만, 명시적으로 로드하지 않는 한(또는 명시적으로 로드하는 에셋의 종속성인 경우) 개별 에셋의 레퍼런스 수는 증가하지 않습니다. 나중에 Resources.UnloadUnusedAssets
를 호출하거나 LoadSceneMode.Single
을 사용하여 새로운 씬을 로드하는 경우, 사용되지 않은 에셋(레퍼런스 수가 0)이 언로드됩니다.