본문 바로가기

Unity2020.1

[Unity::Addressable]고찰

고찰 사항

1. BuildTarget

2. KeyList

3. Caching

4. Version

 

1. BuildTarget

에디터에서 저장소에서 다운로드한 걸 테스트하려고보니 아래와 같이 출력되었다.

현재 에디터는 플렛폼을 안드로이드로 채택하고 있지만 실행되고 있는 운영체제는 Windows이기 때문에 에디터에서 제대로 보려면 BuildTarget이 Window인 에셋번들이 필요했다.

이전에 수동으로 에셋번들을 뽑을 때도 빌드타겟을 바꿔줘서 실행했기 때문에 프로필에서 빌드타겟을 Window로 바꾸면 되겠지?라고 생각했다.

확실히 빌드타겟을 바꾸니 경로도 제대로 들어가고 빌드를 뽑아봤을 때도 해당 폴더로 잘 추출되었다.

 

하지만 빌드타겟을 바꾼다고 그게 에셋번들에 적용은 되지 않았고 AddressableAssetData하위에 플렛폼 명의 폴더와 bin파일이 생성되지 않았다.

 

Build Setting에서 Switch Platform을 하면 해당 플렛폼의 에셋번들을 얻을 수도 있겠지만 규모에 따라 시간도 오래걸리고 번거롭다.

 

https://forum.unity.com/threads/let-me-know-how-to-build-multi-platform-addressable-bundles-at-once.730862/

 

Let me know How to build multi-platform Addressable bundles at once

Hi. this is my first post in Unity forum. I'm using Addressables System on my project recently. When i build Addressable bundle(by 'Build Player...

forum.unity.com

위의 스크립트를 활용하거나 Unity Cloud Build를 공부해봐야될 것 같다.

2. KeyList

Addressable관련 튜토리얼을 찾아보면 대부분 에셋번들 키 하나를 가지고 사이즈를 구하고 다운로드를 하고 해당 프리팹 인스턴스를 하는 걸로 끝난다.

내가 하고 싶었던 건 흔한 모바일 게임처럼 변경사항 사이즈를 체크하고 다운로드받고 적용하는 거였는데 키 리스트를 어떻게 얻는지 언급이 없었다.

https://forum.unity.com/threads/how-to-fetch-latest-catalog-and-re-initialize-addressables-in-runtime.544125/

 

How to fetch latest catalog and re-initialize Addressables in runtime?

Hi. Is there any API for force refreshing the catalog to retreive latest assets from remote server? Here is detail: In mobile environment, users...

forum.unity.com

그래서 Catalog를 체크하고 업데이트하는 비동기 함수가 추가되었다.

https://docs.unity3d.com/Packages/com.unity.addressables@1.18/manual/ContentUpdateWorkflow.html?_gl=1*1ml184z*_ga*MTYyOTUyNDEwNS4xNjI4ODIyOTM0*_ga_1S78EFL1W5*MTYyODgyMjkzMy4xLjAuMTYyODgyMjkzMy42MA..&_ga=2.216631764.372171227.1628822934-1629524105.1628822934#checking-for-content-updates-at-runtime 

 

Content update workflow | Addressables | 1.18.15

Content update workflow Addressables provides a content update workflow intended for games that will dynamically be downloading content from a CDN. In this situation, a player (app, exe, apk, etc.) is built and deployed (such as through the Android app sto

docs.unity3d.com

Check한 결과물로 LocatorID가 나온다고 되어있다.

https://docs.unity3d.com/Packages/com.unity.addressables@1.15/manual/UpdateCatalogs.html

 

Addressables.UpdateCatalogs | Addressables | 1.15.1

Addressables.UpdateCatalogs API static AsyncOperationHandle > UpdateCatalogs(IEnumerable catalogs = null, bool autoReleaseHandle = true) Returns AsyncOperationHandle > : A list of the IResourceLocators loaded from the updated catalogs. Like with the LoadCo

docs.unity3d.com

빌드한 에셋파일들에서 json을 보면

LocatorID가 AddressablesMainContentCatalog라는 걸 알 수 있다.

Update한 결과물로는 key들이 나오는데

이 또한 json파일에 있다. 저기에 있는 키들을 다 주기 때문에 이러면 Key에 규칙을 정해서 따로 뽑아내야한다.

3. Caching

Addressable로 빌드를 할 때마다 catalog가 업데이트되어버린다.

 

당장은 되는 걸 확인하고 싶어서 그래서 저장소에 올릴 에셋번들 빌드를 뽑은 다음 다시 이전버전 에셋번들을 빌드한 후에 apk를 뽑았다. 저장소에 올릴 에셋번들을 빌드한 후에 apk를 뽑으면 catalog가 이미 저장소와 내용이 같기 때문에 업데이트를 체크하지 못한다.

 

그리고 UpdateCatalog함수를 호출을 하고 나면 이전 버전으로 빌드해도 이미 카탈로그가 캐싱되어 있어서 다른 버전으로 빌드를 해야했다.

4. Version

버전을 변경할 때 에셋번들이 하나도 없는 상태에서 에셋번들 빌드를 하면 버전이 바뀌지 않는다. 에섯번들이 없는 새로운 버전을 생성하려면 넣어서 빌드했다가 다시 빼서 빌드해야한다.