본문 바로가기
개발💻/Unity

[Unity] Addressable Asset System

by Sports Entrepreneur 2022. 9. 20.

Addressable Asset System 이란

  • Asset을 좀 더 효율적으로 관리하기 위해 새롭게 나온 시스템
  • Address를 이용하여 에셋의 관리, 로딩, 빌드가 통합된 시스템
  • 모든 동작이 비동기로 구현
  • 최소 2018.2 이상의 버전 필요
  • 스크립트를 이용하여 관리 가능한 빌드 파이프라인리소스 매니저 패키지
  • 로드할 에셋의 실제 위치와 에셋을 로드하는 데 사용할 키를 분리 가능

 

Addressable Asset System 장점

  • 큰 게임 빌드와 배포
    • 에셋 빌드가 간편
    • 에셋 패킹과 참조를 분리하여 관리, 변경사항을 최소화
    • ex. 참조링크가 변경이 되지 않는 한 지속적인 관리 가능
  • 런타임 중 에셋 관리
    • 알아서 의존관계를 확인하여 리소스를 로드
    • ex. 번들이 분리되어 있어서 자동적으로 의존관계를 관리
    • 런타임 에셋 메모리 관리 ex. 개발자가 직접 chache나 container를 구현할 필요가 없음
  • 개발 중에 반복 작업에 대한 편의성
    • Play Mode를 유연하게 설정, 개발 중에도 실제와 같은 테스트 가능
      • ex. 3가지 모드를 제공
      • 1. Use Asset Database (faster)
      • 2. Use Existing Build (Requires built groups)
      • 3. Simulate Grups (advanced)
  • Editor에서 Local Hosting 사용 가능
    • ex. 가상서버를 구축하여 remote환경 testing이 가능

 

Addressable Asset System 단점

  • Potential Issue
    • 인벤토리 아이템이 많은 프로젝트에서는 런타임 메모리에 상당한 부담이 됨

 

Addressable Asset System 과 에셋 번들 차이점

에셋 번들 어드레서블 에셋
- 에셋들을 하나로 묶어 압축 파일을 생성하는 개념
- 불러오는 코드를 작성하기가 대단히 불편함
- 생성된 에셋 번들을 네트워크를 통해 배포하여 사용 (다운로드 콘텐츠, DLC 등)
- 에셋에 주소를 지정할 수 있는 방식
- 에셋 번들처럼 카테고리를 분류할 수 있음
- 사용법이 복잡하지 않음, 인스펙터에 연결하여 사용도 가능함

 

 

용어집

Catalog : 어드레스 등의 키에 대응하는 에셋의 실제 위치와 여러 추가 정보를 제공하는 데이터 파일

Addressable build : Addressable 설정된 에셋을 배포 가능한 에셋 번들로 만드는 과정

Addressable Profile : Addressable 설정에 사용되는 변수를 관리

Asset Goup Schema : 에셋 그룹에 설정과 정보 추가, 추가한 설정과 정보는 에셋 그룹의 콘텐츠를 어떻게 빌드할 지 결정

 

[ Content Packing & Loading 고급 설정 ]

Asset Bundle Comression : 번들을 압축하는 데 사용할 포맷 ex. 기본값 LZ4를 추천

 

Include in Build : 어드레서블 빌드 과정에 포함할지 여부

 

Force Unique Provider : 현재 에셋 그룹이 에셋 그룹 사이에 공유되는 프로바이더가 아니라 고유한 프로바이더 인스턴스를 사용하도록 강제함

 

Use Asset Bundle Cache : 이 에셋 그룹에서 빌드된 에셋 번들을 캐싱할지 결정

 

Asset Bundle CRC : 다운로드한 에셋 번들 데이터의 에러를 검증할 때 사용할 방식을 결정

 

Use UnityWebRequest for Local Asset Bundle : 내장된 에셋 번들, 즉 로컬엣 번들을 로드할 때 웹 리퀘스트를 사용할지 결정

 

Request Timeout : 원격 에셋 그룹에만 적용됩니다. 에셋 번들을 다운로드할 때 응답이나 전달된 데이터가 없어 타임아웃이 발생한 이후 대기하는 시간

 

use Http Chunked Transfer : HTTP 1.1에서 지원되는 HTTP 청크드 전송 인코딩을 사용

 

Http Redirect Limit : 원격 에셋 그룹에만 적용-원격 경로를 웹리퀘스트로 접근할 때 리다이렉트를 허용할 횟수

 

Retry Count : 에셋 번들을 가져오려는 요청이 실패했을 때 재시도할 횟수

 

Include Addresses in Catalog : 이 에셋의 에셋들의 어드레스를 카탈로그에 포함할지 결정

 

Include GUIDs in Catalog : 이 에셋 그룹들의 GUID를 카탈로그에 포함할지 결정

 

AssetReference : 타입의 변수가 에셋의 GUID를 저장하고, GUID를 키로 사용하여 어드레서블 에셋 로드

 

Include Labels in Catalog : 이 이셋 그룹에서 사용된 레이블들을 카탈로그에 포함할지 결정

 

Internal Asset Naming Mode : 내부 에셋의 이름을 어떻게 지을지 결정 ex. default는 full path로 설정

 

Internal Bundle Id Mode : 이 에셋 그룹에서 생성되는 에셋 번들의 내부 ID를 어떻게 생성할지 결정

 

Cache Clear Behavior : 오래된 에셋 번들 캐시를 어떻게 처리할지 결정

  • Clear When Space Is Needed In Cache : 추가 공간이 필요한 경우 제거
  • Clear When New Version Loaded : 이 에셋 번들의 새로운 버전이 로드되었을 때 오래된 버전의 에셋 번들 캐시 제거

BundleMode : 이 에셋 그룹의 에셋들을 에셋 번들로 빌드할 때 에셋을 어떤 단위로 묶을지 결정

  • Pack Together : 이 에셋 그룹의 모든 에셋을 하나의 번들로 묶기
  • Pack Seperately : 각 에셋을 각 에셋 번들로 쪼개기
  • Pack Together By Label : 같은 레이블을 가진 에셋끼리 번들로 묶기

Bundle Naming Mode : 생성되는 번들의 파일명을 결정 ex. default는 Append Has to Filename

 

Asset Load Mode : 에셋을 요청했을 때 어떻게 로드할지 결정

  • Requested Asset And Dependencies : 요청한 에셋과 해당 에셋의 의존성만 로드
  • All Packed Assets And Dependencies : 요청한 에셋과 함께 패킹되어 있던 모든 에셋과 의존성을 로드 ex. Requested Asset And Dependencies 사용 추천

Asset Provider : 에셋 번들 안에 있는 에셋을 로드하는 과정에서 사용할 리소스 프로바이더를 결정

 

Asset Bundle Provider : 에셋 번들을 가져오는 과정에서 사용할 리소스 프로바이더를 결정