One_KWS

Addressable System #4 본문

Unity

Addressable System #4

One-Kim 2023. 2. 21. 21:56

Asset Address

Addressable 에셋을 확인하기 위한 ID(string)이며 에셋을 로드할 때 사용한다. Addressable의 Resource Manager는 해당 에셋이 어디에 저장되어 있는지 알기 위해 카탈로그에서에서 어드레스를 찾는다.

에셋에 어드레스를 적용시키면 런타임 중 해당 어드레스를 이용하여 에셋을 로드한다. Addressable의 Resource Manager는 카탈로그(Catalog)에 있는 어드레스를 보고 에셋이 어디에 저장되어 있는지 찾는다. (에셋은 앱 빌드시 함께 빌드 될 수 있고 Local 또는 Remote로 저장될 수 있다.) Resource Manager는 에셋과 의존되는 에셋들도 로드한다.

 

출처 : https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/AddressableAssetsOverview.html

 

Content Catalogs

카탈로그(Catalog)는 Asset의 Address와 Asset의 위치가 매핑되어있는 파일이다. Addressable은 프로젝트 하나당 하나의 카탈로그를 만들지만 다른 Unity 프로젝트에서 생성된 카탈로그를 이용하여 그 프로젝트의 Addressable 에셋을 가져올 수도 있다.

카탈로그가 생성될 때 hash 파일 또한 함께 생성된다. 해시(hash) 파일에는 카탈로그의 해시가 저장되어 있다. 이 해시 파일을 통해 Addressable 에셋을 가져올 때 카탈로그가 변경되었는지 다운로드가 필요한지를 판단한다.

카탈로그는 앱이 빌드될 때 기본적으로 StreamingAsset 폴더에 저장된다. Local 카탈로그는 Remote 또는 Local 에셋 둘다 접근할 수 있지만 에셋을 업데이트 하길 원한다면 Build Remote Catalogs 옵션을 체크해야 한다. 해당 옵션이 체크되어 있지 않으면 Addressable System은 Remote 카탈로그를 체크하지 않게 되고 콘텐츠가 업데이트 되었는지 감지할 수 없다.

Remote 카탈로그와 Local 카탈로그의 해시 값이 다를 경우 Remote 카탈로그를 다운로드 받고 기존의 Local 카탈로그를 대체하게 된다. 사용자가 업데이트된 에셋을 빌드하면 해시 값 또한 업데이트 되고 새로운 Remote 카탈로그가 바뀐 버전의 에셋을 가리키게 된다.

 

Content Update Builds

출처 : https://docs.unity3d.com/Packages/com.unity.addressables@1.21/manual/editor/building-content/ContentUpdateWorkflow.html

사용자가 콘텐츠를 원격으로 분리해 놓으면 콘텐츠의 변화가 있을 때 매번 앱을 새로 빌드하고 배포하지 않아도 된다. Addressable System이 런타임에 초기화될 때 업데이트된 카탈로그가 있는지 확인한다. 카탈로그가 업데이트 되었다면 새로운 카탈로그를 다운받고 에셋을 로드할 때 새로운 버전의 에셋 번들을 다운받는다.

만약 새로운 Catalog와 함께 모든 콘텐츠를 새로 빌드한다면 앱을 사용중인 유저들은 해당 에셋의 변화가 있든 없든 새로 받는다. 모든 Remote 에셋 번들을 새로 다운로드해야 한다. 콘텐츠가 많을수록 다시 다운로드 받는 시간이 길어지기 때문에 사용자들이 불편을 겪게 된다.

이러한 문제를 방지하기 위해 Addressable은 변화된 에셋을 확인하고 업데이트 하기 위한 도구를 제공한다. 앱을 Release하기 위해 빌드를 할 때 먼저 Addressable 콘텐츠를 빌드하고 앱 빌드를 하게 되는데 앱 빌드에는 Local 에셋 번들이 포함이 되고 Remote 에셋 번들은 서버에 업로드한다.

 

Addressable 콘텐츠를 빌드하는 Default Build Script는 항상 addressables_content_state.bin를 생성한다. addressables_content_state.bin 파일은 콘텐츠 업데이트시 필요한 파일이다.

콘텐츠 업데이트가 준비되었다면 Check Content Update Restrictions를 실행시켜addressables_content_state.bin 파일을 검사하고 변화가 있는 에셋들을 해당 에셋의 Group Setting에 따라 새로운 Remote Group으로 이동시킨다.

Asset Bundle을 업데이트 할때 Update a Previous Build를 실행한다. Update a Previous Build 빌드 또한  addressables_content_state.bin를 이용하여 콘텐츠를 빌드하고 수정되지 않은 콘텐츠는 기존의 에셋 번들에 접근하고 수정된 콘텐츠는 새로운 에셋 번들에 접근할 수 있도록 수정된 카탈로그를 생성한다.

 

Asset Bundle은 코드를 포함하고 있지 않기 때문에 Addressable 콘텐츠 빌드시 코드의 변화가 있어도 적용되지 않는다. 코드 변화가 적용되도록 하려면 에셋 번들과 함께 앱도 새로 빌드해야한다. 변경된 코드와 함께 앱을 배포할 때는 새로운 코드가 기존의 에셋과 잘 호환되는지 체크해야한다.