Game Tech Blog

Unity Addressable Asset System 본문

Unity/Addressable

Unity Addressable Asset System

jonghow 2023. 12. 26. 23:17
반응형

Unity Addressable Asset System이란?

- "주소" 별로 Asset을 로드하는 방식을 제공하는 시스템

- 비동기식 로딩을 사용하며, 모든 종속성 컬렉션이 있는 모든 위치에서의 로딩을 지원.

- 기존 Asset Bundle 또는 리소스 폴더를 사용하든 관계없이 Addressable Asset 은 게임을 더욱 동적으로 만드는 간단한 방식을 제공.

 

기존에 잘 쓰던것도 있는데 왜 또 개발되었는가?

- 기존에 잘 쓰던 방식은 리소스 폴더, 에셋 번들을 사용하는 방식이 있었다.다만, 각각의 치명적인 이유가 있어서 이 문제들을 해소하기 위하여, Addressable 이 개발된 것으로 보아도 무방하다.

 

1. 리소스 폴더 사용 방식

 

1) Apk 사이즈가 커진다.

 -> Resources 폴더 안에 들어있는 Asset은 빌드 시, apk 파일 사이즈로 들어간다. 꼭 필요한 필수적인 시작 UI, 최소한의 언어팩 등만 넣어야한다. 이 빌드 크기는 구글 스토어에서 크기가 200MB 이상이면 올리지 못하기 때문에 관리가 꼭 필요하다. (몇년전엔 100MB 정도로 알고있었는데, 조금 완화된것 같다.)

 

2) 앱 시작 시간이 길어진다.

3) 앱이나 폴더 변경시 재 빌드가 필요하다.

 -> Apk 빌드에 묶여서 Asset 변경 시, 재빌드가 필수적이다.

4) 에셋 이름 변경이 힘들다.

 -> 경로를 바꿔줘야 하는 작업이 필요함.

 

2. AssetBundle 사용 방식

1) Asset을 묶음 단위로 관리 가능

2) Apk 사이즈 절감
3) 앱 시작 시간 단축

 

4) 번들의 종속성 이슈

-> 에셋은 내부에 어떤 Sprite 와 연결되어있는지, 또는 스크립트나 쉐이더 이런 데이터를 나타내는 종속성이라는 데이터를 가지고 있다. 보통 할당된 guid 로 종속성값이 들어가 있는것으로 알고 있긴한데, 만약 Asset A 가 C 이미지를 사용하고 있다고 가정하고, Asset B 또한 C 이미지를 사용하고 있어서 A,B 둘의 종속성에 C의 Guid 가 들어가 있다면, Asset Bundle은 A 에 C 를 추가할 것이고, B 에도 똑같이 C 를 복사해서 B 번들에도 C 가 들어가 있을것이다.

이는 하나만 필요한 내용을 A,B 모두 중복 데이터를 가지게 되는 일이다.

 

이러한 내용들이 있어서 Addressable Asset System 이 개발되었다.

**단, Addressable Asset System 이 AssetBundle 을 대체하거나 하는 기술은 아니며, 관리 편의성을 위한 유틸리티 정도의 내용이다.

 

Addressable의 장점?

1)에셋 빌드와 배포의 단순화

2)효율적인 에셋 관리 -> 어드레서블 프로파일러로 로드/언로드 현황 및 레퍼 카운터를 볼 수 있음.

3)초기 빌드 볼륨을 최소화

4)에셋별 동적 로드를 통해 메모리 관리 가능

 

Vs Asset Bundle

이 둘의 가장 큰 차이는 저장소로부터 에셋을 가져오는 방식이다.

에셋 번들은 실제 참조할 위치를 알아야하지만, 어드레서블은 참조할 어드레스의 정보만 알면되고, 어드레서블로 가져올때는 이 어드레스라는 중개자를 통해서 원하는 것을 가져올 수 있도록 하면 된다.

 

추가로, 에셋번들에서 발생했던 종속성 관련 이슈도 자동으로 해주기 때문에 에셋의 중복 번들링 이슈는 회피할 수 있다.

즉, 에셋이 속할 수 있는 에셋그룹은 단 하나로 유일하다는 것이다.

 

반응형
Comments