어드레서블이란?
어드레서블은 Unity 패키지로, 프로젝트에서 asset을 로드하고 관리하는 간편하고 효율적인 방법을 제공합니다. 비동기적으로 asset을 로드 할 수 있어 게임의 성능을 향상시키고 로딩 시간을 줄일 수 있습니다. 어드레서블은 자동 의존성 관리, 콘텐츠 업데이트, 버전 관리 등의 기능을 제공하여 자산 관리 과정을 간소화할 수 있습니다. 어드레서블을 사용하면 원격 서버, 로컬 스토리지, 에셋 번들과 같은 다양한 위치에 자산을 저장하고 중앙 집중식 시스템을 통해 관리할 수 있습니다.
비동기 에셋 로드 / 생성
비동기 load
var result = await Addressables.LoadAssetAsync<T>(path);
바로 생성
Addressables.InstantiateAsync("Assets/Prefabs/something.prefab");
자동 의존성 관리
- "Asset Reference" 으로 asset 간의 종속성을 관리할 수 있습니다.
- Asset Reference는 asset 및 해당 종속성에 대한 정보를 address할수 있는 타입입니다.
MonoBehaviour 또는 ScriptableObject에서 AssetReference 클래스를 사용합니다. 이러한 클래스 중 하나에 serialize 가능한 AssetReference 필드를 추가하면 인스펙터 창에서 필드에 값을 할당할 수 있습니다. 유형 및 레이블별로 할당할 수 있는 에셋을 제한할 수 있습니다.
어드레서블이 아닌 asset을 넣으면, 자동으로 default local그룹으로 할당하고 관리합니다. 정말 편리한 기능을 제공합니다.
- 자동 종속성 관리를 하려면 Inspector 창으로 주소 지정 그룹으로 그룹화 할 수 있습니다. 기본적으로 어드레서블는 asset의 종속성을 자동으로 추적하고 업데이트합니다. 따라서 종속성을 수정하면 어드레서블가 변경 사항을 감지하고 해당 asset을 업데이트합니다.
- 어드레서블을 사용하여 asset을 로드할 때, 해당 asset의 종속성도 자동으로 로드됩니다.
- 어드레서블의 자동 종속성 관리 기능을 사용하면 asset 관리 프로세스를 단순화하고 누락 또는 오래된 종속성으로 인한 런타임 오류 위험을 줄일 수 있습니다.
콘텐츠 업데이트, 버전 관리 from 서버
프로젝트 폴더에 번들이 생성 되는 파일 안에 다음과 같은 형태로 파일이 생성 됩니다. 이를 AWS S3를 통해서 관리해 줍니다. 혹은 다른 원격서버로..
이렇게 해주면 콘텐츠의 asset이 바뀔때마다 버전 업데이트가 아닌 콘텐츠의 업데이트를 할수가 있습니다. 유저 입장에선 해당 리소스의 번들을 재 다운로드만 해주면 됩니다.
또한, 버전의 관리는 상위 이미지 (번들 파일 이미지)에서 catalog가 존재하는 데, 거기에 asset들의 정보와 버전 정보까지 같이 존잴합니다. 어드레서블 내부 asset을 바꾸고 rebuild를 하면 바뀐 점을 반영한 카탈로그가 생성됩니다.
어드레서블은 catalog를 통해 해당 버전에 맞는 asset을 가져옵니다. 인스펙터 창을 통해 버전을 설정 할수 있습니다.
캐시된 카탈로그보다 새로운 버전이 있는 지 확인 할때 Addressables.UpdateCatalogs 를 사용해줍니다.
IEnumerator UpdateCatalogs() {
AsyncOperationHandle<List<IResourceLocator>> updateHandle
= Addressables.UpdateCatalogs();
yield return updateHandle;
Addressables.Release(updateHandle);
}
카탈로그에 대한 update 체크를 할땐, 다른 어드레서블 requests에 대한 행위는 모두 중단을 합니다.
어드레서블에 대한 튜토리얼은 넣지 않았다...
(솔직히 인터넷에 많고 더 잘쓸 자신이 없다...)
'Game Dev > Unity' 카테고리의 다른 글
Unity - Nuget 패키지 적용 하는 법 (1) | 2023.05.19 |
---|---|
UniTask - How to use UniTask (태스크 생성, 취소) (0) | 2023.05.15 |
TestRunner - Unity 테스트 환경 (feat. 테스트 코드의 중요성) (0) | 2023.04.23 |
Unitask의 정체 - (feat. task, 비동기, Unity는 싱글스레드?) (0) | 2023.04.09 |
Unity로 배우는 game dev architecture : Part1_SOLID (0) | 2023.03.18 |