Unity

Unity Addressables 정리

minquu 2022. 6. 14. 19:03
반응형

참고 영상 - (https://www.youtube.com/watch?v=EP3pvPAcHSo&t=36s)

 

 

 

Addressables 개요

 - 컨텐츠 빌드하고, 로딩하는 관리 시스템
 - 컨텐츠에 주소라는 개념을 사용해서, 이런 이름이 사용됨
 - 유니티 2018.2 이상 버전이 필요
 - 스크립트를 이용하여 관리 가능함
 - 모든 동작이 비동기로 구현

사용이유
 - 큰 게임 빌드와 배포에 유리
  - 에셋 빌드가 간편
  - 에셋 패킹과 참조를 분리하여 관리 
 - 런타임 중 에셋 관리
  - 의존 관계를 확인하여 리소스 로드 
     -> 번들이 따로 있어서도, 의존성을 찾아주기 떄문에 유리함
  - 런타임 에셋 메모리 관리

 - 개발 중 반복 작업에 대한 편의성

  - PlayMode를 유연하게 설정, 개발 중에도 실제와 같은 테스트 가능

  - Editor에서 Local Hosting 사용 가능

 

Addressables 시작하기 

Unity - Window - Package Manager - Addressables 설치해주기

 

Window ->  AssetManagement -> Addressables -> Groups 에 들어가 준다.

 

create Addressables Settings으로 초기 세팅을 해준다. 

 

 

Addressables에서는 Group으로 관리하는데, 그룹을 만들 수 있음

 

새로 만들면, Packed Assets이 생김. 

Packed Assets는 유니티에서 제공해주는 Packed Assets 임

만약  그 구성을 따르지 않고, 커스텀하게 Assets를 관리할라면 빈 어셋을 Blank(no schema)로 만들어 준다. 

이제 프리팹을 보면 Addressable 체크가 존재함

패쓰가 존재함, 기본적으로 프리팹에 루트를 따르지만, 루트를 설정해줄 수 있음

 

이 패쓰가 어드레서블이고, 이 리소스를 찾는 주소가 되는 개념임.

그래서 중첩되지 않게 해야함!

 

어드레서블 그룹 창에 가면, 방금 잡은 Group에서 이 주소가 보여짐

 

이제 이런 어드레서블을 빌드를 해야지만 사용할 수 있음

업데이트는 기존 빌드를 업데이트 할 때 사용함

Clean Build는 기존 빌드를 클린하게 다 지우고, 빌드함

 

Tip

API 함수를 이용해서 컨텐츠 빌드를 할 수 있음

 

AddressableAssetSettings.BuildPlayerContent() 를 이용해서 스크립터 상에서 컨텐츠 빌드를 할 수 있음 

 

플레이 모드에서 로직에 대한 테스트를 할 수 있음

Use Asset Database 는 데이터베이스 기준으로 빠르게 런타임 테스트 이다.

단, 런타임때 된다고해서, 보장이 되지 않기 때문에,

두 번째인 Simulate Groups으로 시뮬레이트 테스트를 해야합니다.

단, 위 가지는 어드레스에 대한 기능에 대한 테스트라서,

실제 번들에 대한 테스트는 아님.

그래서

세 번째는  릴리즈와 동일한 환경을 제공 해주는 것

 

이제 Addressable를 사용할라면

 

using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

 

이 두가지를 using 해준다.

 

DownloadDependenciesAsync 함수는 기존에 있는 에셋을 다운로드 할 때 사용하는 함수임

이걸로 다운로드를 실시 해주고

 

 

LoadAssetAsync를 이용해서 다운로드 받은 에셋을 메모리에 올려준다.

번들 내에서 내가 필요한 에셋을 가져온다.

 

그리고 Addressbles.InstantiateAsync를 사용해서 오브젝트를 꺼내서 사용한다.

 

미리 다운로드 받은 캐시를 비우고 새로 받고 싶을 때 쓰는 함수임

이걸 하기 위해서는 현재 사용하고 있는 모든 오브젝트를 메모리에서 내려줘야한다. 

즉, 에셋번들과 관련있는 함수도 메모리에서 내려줘야함

그래야지 정상적으로 캐쉬가 날라간다.

그렇지 않으면 사용중인 캐쉬는 익셉션 처리가 된다.

 

이건 유니티 내부에서 제공하는 것임.

에셋번들 뿐만아니라, 웹리퀘스트 등등 날려줌

 

대부분 우리가 에셋을 다운받는 건, 외부 저장소에 있는 에셋을 다운 받기 위함임

Local Hosting과 커스텀 서비스 방식이 있음

 

먼저 로컬 호스팅 방식을 보면 일단 지금은 비워져있는 상태임

 

Enable 체크를 하고, Reset를 하면 세팅이 들어간다.

이 기능은 대부분 정상적으로 작동되지만, 핫스팟 같은 걸 이용하면 안될 수 도있음

 

 

AddressableAssetSettings에서 Remote 환경을 세팅 해줄 수있음 

1.disable Catalog update

 - 에셋이 자동적으로 업데이트가 된다. 이걸 체크하면 수동적으로 에셋을 업데이트를 해줄 수 있다.

2. Buiild Remote Catalog

 - 리모트 빌드를 할라면 체크를 해준다.

  -> 이걸 체크하면 Build Path와 Load Path가 만들어진다.

     이 Path로 데이터를 빌드하고, 로드하는 것

      이걸 어떻게 하냐에 따라서 서버에 어떤걸 올리지 결정하게 됨으로 중요함 부분임

       즉, 리모트로 관리하려면 설정을 미리 잘 정해야함

3. Unique Bundle IDs

 - 이걸 체크 해줘야지 번들이 올 때 아이디가 매번 바뀌지 않음

 - 이걸 체크하지 않으면 매번 빌드할 때마다 ID가 바뀜

 - 만약 매번 IDs 가 바뀌면 요청시 매번 다시 다운받아야하는 문제가 생길 수도 있음

 

 

 

 

 

 

반응형

'Unity' 카테고리의 다른 글

Unity Addressables Remote로 서버에서 다운로드 받기  (0) 2022.06.15
210726_유니티 Asset Bundle  (0) 2021.07.26