본문 바로가기

유니티/Addressable

[ Addressable ] 04 . Addressable 콘텐츠 빌드하기

[ 학습 흐름 ]
  • 에셋의 종속관계를 이해한다 .
  • 어드레서블 콘텐츠 빌드를 수행한다 .
  • 빌드 아티팩트에 대해 이해한다 .

[ 에셋의 종속 관계 ]

1 . 에셋 종속 관계

[ 빌트인 데이터의 동작방식 ]

에셋이 플레이어 빌드로 익스포트 되는 방식

- Build Setting의 씬 목록에 씬을 포함하면 씬과 씬에 사용된 에셋빌트인 데이터에 포함된다 .

- Resources 폴더에 있는 에셋도 빌트인 데이터에 포함된다 .

- 이때 , 씬의 에셋은 씬의 일부로만 로드되는 반면 , Resources 에셋은 독립적 로드가 가능하다는 차이점이 있다 .

- 만약 씬 - 리소시스에 동일한 에셋이 있다면 단일 인스턴스 공유가 아닌 에셋의 복사본이 생성된다 .

- ex ) 씬 - 리소시스 - 어드레서블 모두 같은 마테리얼 공유시 1개가 아닌 3개의 마테리얼이 존재하는 것 .


2 . 에셋 및 에셋 번들 종속 관계

[ 명시적 에셋 ]

- 어드레서블 그룹에 에셋을추가할 경우 , 콘텐츠 빌드를 만들때 에셋이 에셋번들에 패킹된다 

- 에셋은 번들에 명시적으로 포함되기에 명시적 에셋이라 한다 .


[ 암시적 에셋 ]

- 에셋이 다른 에셋을 참조할 경우 , 참조된 에셋은 원래 에셋과 종속 관계가 된다 .

- 이를 에셋 종속성이라고 한다 .

- ex ) 에셋이 번들 A에 패킹 , 참조된 에셋이 번들 B에 패킹된 경우 번들 B는 번들 A에 종속된다 .

- 이때 , 어드레서블이 아닌 종속성은 참조 에셋 번들에 포함된다 .

- 에셋은 번들에 암시적으로 포함되기에 암시적 에셋이라고 한다 .


3 . 여러 암시적 에셋 참조

[ 암시적 에셋 참조 ]

- 둘 이상의 어드레서블이 동일한 암시적 에셋을 참조하는 경우 , 참조하는 어드레서블이 포함된 각 번들에 암시적 에셋의 사본이 포함된다 .

- 이 경우 단일 인스턴스가 아니기에 런타임에 인스턴스의 상태를 변경하면 모든 에셋이 공통 변경되는게 아닌 동일한 번들의 오브젝트만 변경사항이 감지된다 . ex) Bundle A의 Material P의 변경은 Prefab X 만 감지한다 .

- 이를 방지하려면 암시적 에셋을 어드레서블 에셋으로 만들어야 한다 .


[ 콘텐츠 빌드하기 ]

1 . 콘텐츠 빌드

[ 콘텐츠 빌드란 ]

- 콘텐츠 빌드는 어드레서블 그룹을 처리하여 콘텐츠 카탈로그 , 런타임 설정 및 에셋을 포함하는 에셋번들 을 생성한다 .

- 어드레서블은 런타임에 위 파일을 사용 , 콘텐츠를 로드한다 .

- 설정을 통해 플레이어 빌드콘텐츠 빌드도 같이 할 수 있다 .


[ 콘텐츠 빌드의 유형 ]

- 콘텐츠 빌드는 두 가지의 콘텐츠를 생성 가능하다 .

  • Local Content : 플레이어 빌드에 직접적으로 포함되는 콘텐츠이다 . 로컬 콘텐츠에 기본 빌드 경로를 사용하는한 어드레서블 시스템이 로컬 콘텐츠를 자동으로 관리한다 . 주의점은 로컬 빌드 경로를 변경하는 경우 , 플레이어 빌드를 하기전에 변경된 로컬 빌드 경로에 생성된 로컬 콘텐츠를 프로젝트의 Assets - Streaming Assets에 복사해야 정상적으로 작동한다 .
  • Remote Content : 앱 설치 이후 URL을 통해 다운로드 되는 콘텐츠이다 . 사용자는 원격 콘텐츠를 호스팅 서버에 업로드 , 앱이 Profile에 명시된 RemoteLoadPath를 통해 지정된 URL에 액세스 하게 해야한다 .

2 . 콘텐츠 빌드 생성하기

[ 콘텐츠 빌드의 간략한 과정 ]

  1. 프로젝트의 그룹설정을 완료한다 . 
  2. 원격 배포시 프로파일과 어드레서블 설정을 구성하여 원격 콘텐츠의 배포를 활서화 한다 .
  3. 올바른 프로파일을 선택한다 .
  4.  그룹창에서 빌드를 실행한다 .

[ 콘텐츠 빌드 하기 ]

- 그룹 설정과 어드레서블 세팅을 완료한 이후 그룹창으로 진입 New Build - Default Build Script를 진행한다 .

- 지정한 빌드 경로 (원격의 경우 ServerData - {플랫폼})에 번들과 카탈로그 파일이 생겼을것이다 .

- 만약 원격 콘텐츠라면 Addressable AssetData - 플랫폼의 경로에 state.bin 파일이 생겼을것이다 .

- 해당 파일은 업데이트 빌드시 변경된 부분만을 효율적으로 처리 할 수 있게 한다 .

- 각 파일에 대한 자세한 설명은 아래 빌드 아티팩트에서 살펴보자 .


[ Windows 파일 경로 제한 ]

- 콘텐츠 빌드 생성 경로가 260자가 넘어간다면 콘텐츠 빌드를 생성 할 수 없다 .

- 이경우 Could not find a part of the path 오류가 발생 할 수 있다 .


[ 빌드 아티팩트 : 결과물 ]

1 . 플레이어 빌드에 포함되는 아티팩트

어드레서블 시스템은 플레이어 빌드 중 Library/com.unity.addressables/aa/<AddressablesPlatform> 폴더에서 StreamingAssets 폴더로 아티팩트들을 복사한다 . 각각을 알아보자 .

 

[ Local Asset Bundles ]

- 그룹, 프로파일, 플랫폼 설정에 따른 .bundle 파일 .

- 기본적으로 이러한 파일은 BuildTarget 하위 폴더에 있다 . 위의 경우 ios 타켓이기에 aa - ios 폴더 내에 위치한다

- 그룹을 통해 생성된 번들 파일의 빌드 위치를 변경하려면 Local Profile의 Build & Load Paths 설정을 조정한다 .


[ catalog.json ]

- 새로운 원격 카탈로그를 사용할 수 없는 경우 런타임에 에셋을 찾고 로드하는 데 사용되는 콘텐츠 카탈로그이다.

- 즉 , 로컬 카탈로그 .

- 원격 카탈로그는 로컬 카탈로그의 초기 사본이다 . 콘텐츠 업데이트를 통해 변할수도 있지만 기본적으로 처음 뿌리는 같다 .


[ addressablesLink/link.xml ]

- link.xml 파일은 Unity에서 Addressables 및 다른 시스템에서 코드 제거(Linking) 문제를 방지하기 위해 사용하는 파일이다 .

- Addressables 시스템에서도 이 파일을 사용하여 미리 정의된 코드나 에셋의 링크를 유지한다..


2 . 플레이어 빌드에 포함되지 않는 아티팩트

 

[ Server Data - Remote AssetBundles ]

- 그룹, 프로파일, 플랫폼 설정에 따른 .bundle 파일이 있다. 에셋들의 묶음 .

- 기본적으로 이러한 파일은 BuildTarget 하위 폴더에 있다.

- 그룹을 통해 생성된 번들 파일의 빌드 위치를 변경하려면 Build & Load Paths 설정을 조정한다 .


[ Server Data - Catalog.json ]

- 어드레서블이 시스템에 제공된 키를 기반으로 에셋의 실제 위치를 조회하는데 사용하는 데이터 저장소 .

- 다운로드 된다면 로컬카탈로그를 오버라이드 하는 원격 카탈로그이다 .

- 해당 파일은 Content Update Setting 의 Build Remote Catalogs 옵션이 활성화 된 경우 생성된다 ,

- 파일이름은 빌드의 타임 스탬프를 포함하지만 , Catalog settings에서 Player Version Override 지정으로 변경이 가능

- 카탈로그에 대한 자세한 내용은 콘텐츠 카탈로그 참조하자 .


[ Server Data - catalog_{timestamp or player version}.hash ]

- 클라이언트 앱이 원격 카탈로그를 마지막으로 다운로드한 이후 원격 카탈로그가 변경되었는지 여부를 확인하는 데 사용

- Catalog.json 의 생성조건과 동일하게 생성되고 위치한다 .


[ addressables_content_state.bin ]

- 콘텐츠 업데이트시 이전 상태와 비교하여 변경된 에셋만 업데이트하는데 사용한다 .

- 콘텐츠 업데이트 빌드를 만드는데 사용된다 .

- 동적 콘텐츠 업데이트를 지원하는 경우 각 콘텐츠 릴리스 이후 해당 파일을 저장해야 한다 .


3 . 비교

파일명 목적 내용 동작 방식
catalog.json 에셋의 주소와 실제위치의 대조 json 형 JSON을 구문 분석하여 주소와 실제 위치를 대조함
catalog_{timestamp or player version}.hash 파일 검증 및 업데이트 확인 카탈로그 파일의 해시 값 로컬 및 원격 해시 값을 비교하여 카탈로그 업데이트를 확인
addressables_content_state.bin 콘텐츠 상태 추적 빌드 시점의 콘텐츠 상태 정보 콘텐츠 업데이트 시 이전 상태와 비교하여 필요한 에셋만 업데이트

.출처

https://docs.unity3d.com/kr/Packages/com.unity.addressables%401.21/manual/Builds.html

 

빌드 콘텐츠 개요 | Addressables | 1.21.17

빌드 콘텐츠 개요 콘텐츠 빌드는 어드레서블 그룹을 처리하여 콘텐츠 카탈로그, 런타임 설정 및 에셋을 포함하는 에셋 번들을 생성합니다.

docs.unity3d.com