- 에셋의 종속관계를 이해한다 .
- 어드레서블 콘텐츠 빌드를 수행한다 .
- 빌드 아티팩트에 대해 이해한다 .
[ 에셋의 종속 관계 ]
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 . 콘텐츠 빌드 생성하기
[ 콘텐츠 빌드의 간략한 과정 ]
- 프로젝트의 그룹설정을 완료한다 .
- 원격 배포시 프로파일과 어드레서블 설정을 구성하여 원격 콘텐츠의 배포를 활서화 한다 .
- 올바른 프로파일을 선택한다 .
- 그룹창에서 빌드를 실행한다 .
[ 콘텐츠 빌드 하기 ]
- 그룹 설정과 어드레서블 세팅을 완료한 이후 그룹창으로 진입 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
'유니티 > Addressable' 카테고리의 다른 글
[ Addressable ] 06 . 콘텐츠 원격으로 배포하기 (0) | 2024.08.01 |
---|---|
[ Addressable ] 05 . Addressable 콘텐츠 업데이트 하기 (2) | 2024.07.19 |
[ Addressable ] 03 . Addressable 그룹으로 관리하기 (0) | 2024.07.12 |
[ Addressable ] 02 . Addressable 로 프로젝트 전환하기 (0) | 2024.07.10 |
[ Addressable ] 01 . Addressable이란 (0) | 2024.07.09 |