- Addressables
Addressables
팀원들과 리소스를 어떻게 효율적으로 관리할 수 있을지에 대해서 고민 하면서
Addressables에 대해서 공부를 해보고 사용을 해보자는 의견을 통해서 Addressables에 대해서 공부한 내용이다.
Addressables 란?
컨텐츠를 빌드, 로드 및 관리하는 시스템
으로 모든 동작이 비동기
형태로 구현 되어 있다.
내부적으로 컨텐츠의 Address 라는 개념을 통해서 전체적으로 참조하고 관리
를 한다.
리소스 매니저가 포함되어 있는 형태로 런타임 중 리소스를 로드, 언로드 할 수도 있다.
최소 2018.2 이상의 유니티 버전 필요! 빌드 파이프라인을 스크립트를 이용해 관리할 수 있음 (커스텀 가능)
Addressables의 장점
- 에셋 패킹과 참조를 분리하여 변경사항을 최소화 한다. -> 큰 게임 에서도 에셋 빌드가 간편하다.
- 런타임 중 알아서
의존 관계를 확인해서 리소스를 로드
하고 에셋메모리를 관리
해준다.
Addressables의 사용 준비
- Addressables 패키지 설치
- Window > Assest Management > Addressables > Groups 에서 Addressables Group을 생성
- Asset들의 Inspector 창에서
Addressable
을 체크하고, 생성한 그룹에 넣는다. - 에디터에서 컨텐츠를 빌드 Addressables Groups 윈도우에서 Build > New Build > Default Build Script 선택
- 3가지 빌드 모드 중 하나를 선택
Use Asseet Database > Simulate Groups > Use Existing Build 오른쪽에 있을수록 속도는 느리지만 정확한 테스트
Addressables의 사용
- Header
using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations;
- DownloadDependenciesAsync()
Addressables.GetDownloadSizeAsync()로 다운로드 받을 크기를 확인하고 (데이터가 있다면 0보다 큼)
DownloadDependenciesAsync()로 리소스를 다운로드 내부적으로 다운받은 리소스를 캐싱해서 관리 해준다.
- LoadAssetAsync()
에셋을 메모리에 로드시킨다. 내부적으로 캐싱 시스템이 구현되 있으므로 따로 캐싱할 필요는 없다.
- InstantiateAsync()
해당 프리펩을 사용해서 게임 오브젝트를 생성
- ClearDependencyCasheAsync()
다운로드 받은 리소스의 캐쉬를 클리어 호출 전 현재 로드되어 있는 캐쉬를 사용하는 모든 오브젝트를 메모리에서 해제 해야한다.
Addressables 와 Resources 비교
-
Resources 는 패키지 내에 파일이 포함 되어야 한다.
-
Resources 폴더에 있는 파일들은 사용 여부와 관계없이 패키징되어 용량에 낭비가 있을수 있다.
-
Resources 폴더에 파일이 많을 수록 유니티 엔진에서 앱을 처음 구동할 때 지연시간이 증가하게 된다. (파일을 찾는 초기 비용)
-
Resourece 에서 파일을 로드할 떄 전체 파일을 순회하여 해당하는 파일을 찾기 때문에 비용이 많이 들어간다.
Addressables는 Address를 통해 직접 접근할 수 있기 때문에 성능상에서 이점이 있다.
Addressables 와 Asset bundle 비교
- Addressables은 Asset bundle을 내부적으로 사용하며 관리해주는 시스템이다.