Unity Addressable Asset System

Addressable Asset System 은 "Address" (주소) 별로 자산(Asset)을 쉽게 로드할 수 있는 방법을 제공한다. 비동기 로딩을 사용하여 모든 종속성 모음이 있는 모든 위치에서 로드를 지원한다. 해당 자산이 로컬 애플리케이션에 있는지 CDN 에서 전송 받는지 관계없이, Addressable Asset System이 자산을 찾아 리턴해준다. 

 

공식 문서 : https://docs.unity3d.com/Packages/com.unity.addressables@latest/index.html

 

시작하기

Addressable Asset System을 사용하기 위해서는 Unity3d 버전 2018.3 이상이 필요하다.

이 패키지를 설치하려면 패키지 관리자를 이용하여 설치해야한다.

이 글에서 사용하는 Addressable 버전은 1.9.2 이다

Addressable 설치했다면 아래 순서대로 진행한다.

Create Addressable Settings 를 누르면 아래와 같이 새로운 디렉토리가 프로젝트에 생긴다.

그룹도 아래와 같이 변한다.

 

Addressable 에 자산을 추가하는 방법은 2가지가 있다.

1. Inspector 창에서 추가하기

Addressable 에 추가하고자 하는 자산을 선택한 후 Addressable 체크하고 자산을 식별할 이름을 입력한다.

Default Local Group 에 추가한 자산이 추가된다.

 

2. Addressables Groups 창으로 추가

추가 하고자 하는 자산을 추가 하고자 하는 그룹으로 드래그하여 추가한다.

 

Addressable Group 관리

특정 그룹의 Advanced Options - Include In Build 를 체크 해제시 어드레서블 빌드에 들어가지 않는다.

 

 

주소(Address) 지정

자산의 기본 주소는 프로젝트에서 자산의 경로이다. (Ex: Assets/images/icon_22.png) 이 경로를 변경하고 싶다면 변경 하고자 하는 자산을 오른쪽 클륵하고 Change Address 를 눌러 주소를 변경한다.

 

빌드하기

Addressables Asset System도 에셋번들과 마찬가지로 애플리케이션을 빌드하기 전에 실행중인 게임에서 사용할 수 있는 파일들로 컨텐츠를 빌드해야한다. 자동으로 빌드가 되지 않으며 에디터 또는 API 를 통해 컨텐츠를 빌드해야한다.

  • 에디터에서 빌드하려면 Addressables Group 창에서 Build - New Build - Default Build Script 를 눌러 빌드한다.

 

 

Addressable Assets Profile

컨텐츠가 번들로 빌드되는 방식을 보다 쉽게 변경할 수 있는 기능이다. 장치에 컨텐츠가 로컬인지 원격 서버에서 다운받는건지 판별하는데 사용할 수 있다.

위와 같이 골라 사용 가능

에디터에서 Profile Setup Window 에 접근하는 방법은 여러가지다.

  • Select Windows > Asset Management > Addressables > Profiles.
  • Select Windows > Asset Management > Addressables > Groups, then select Tools > Profiles.
  • Select Windows > Asset Management > Addressables > Groups, then select Profile > Manage Profiles..
  • You can also access these settings via the AddressableAssetSettings Inspector.

기본적으로 제공되는 5가지 변수

  • BuildTarget
    기본 값 : [UnityEditor.EditorUserBuildSettings.activeBuildTarget] 을 통해 현재 에디터 빌드 설정을 가져온다.
  • LocalBuildPath
    기본 값 : [UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]
    [BuildTarget]은 위의 BuildTarget을 참고한다.
  • LocalLoadPath
    기본 값 : {UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]
  • RemoteBuildPath
    기본 값 : ServerData/[BuildTarget]
  • RemoteLoadPath
    기본 값 : http://localhost/[BuildTarget]

 

통사론

모든 변수에는 문자열 유형이다. 일반적으로 필요한 경로 또는 값을 정확하게 입력 할 수 있지만 다음과 같은 두 가지 추가 구문 지정자를 사용하여 동적으로 입력할 수 있다.

  • 대괄호 []. 대괄호로 묶인 항목은 빌드시 평가됩니다. 내부 값은 다른 프로파일 변수 (예 : [BuildTarget]) 또는 코드 변수 (예 : [UnityEditor.EditorUserBuildSettings.activeBuildTarget]) 일 수 있습니다. 빌드 시간 동안 그룹이 처리 될 때 대괄호 안의 항목이 평가되고 결과 문자열이 카탈로그에 작성됩니다.
  • 중괄호 {}. 중괄호로 묶인 항목은 런타임에 평가됩니다. 일반적으로 여기의 값은 코드 변수입니다 (예 : {UnityEngine.AddressableAssets.Addressables.RuntimePath}).
    예를 들어 "trees.bundle"이라는 자산 번들을 작성하는 그룹에 설정된 {MyNamespace.MyClass.MyURL} / content / [BuildTarget]} 의로드 경로가 있습니다. 빌드 중에 카탈로그는 해당 번들의로드 경로를 {MyNamespace.MyClass.MyURL} /content/Android/trees.bundle} 로 등록합니다 . 그런 다음 시작시 카탈로그가 처리 될 때 프로파일 시스템은 MyNamespace.MyClass.MyURL을 평가하여 최종로드 경로가로 끝납니다 http://myinternet.com/content/Android/trees.bundle.

{UnityEngine.Application.persistentDataPath}/aa/[BuildTarget] 로 LocalBuildTarget 을 설정하면 프로젝트의 Library 폴더에 로컬 빌드 파일이 만들어진다.

 

 

새 프로필 추가

Create - Profile 를 누르면 새로운 프로필이 추가된다. 현재 활성화 (기본) 프로필에서 모든 값이 복사되어 만들어진다.

프로필 위에서 오른쪽 마우스 클릭을 할 경우 3개의 메뉴가 떠오른다.

  • Set Active - 기본 프로필로 설정된다.
  • Rename Profile - 프로필 이름이 변경된다.
  • Delete Profile - 프로필을 지운다.

새 변수 추가

새로운 변수 추가를 할 수 있다.

 

 

포장 및 적재 경로 지정

프로파일에서 필요한 변수를 설정하면 지정된 변수를 기반으로 자산 그룹의 빌드 및로드 경로를 선택할 수 있습니다.

빌드 및로드 경로를 설정하려면

  1. 프로젝트  에서 주소 지정 가능한 자산 그룹을 선택하십시오 .
  2. 관련 검사기 창의 컨텐츠 패킹 및로드 > 빌드 및로드 경로 에서 빌드 경로  로드 경로 드롭 다운의 현재 설정된 프로파일에서 원하는 변수를 선택하십시오 .
    경로를 직접 입력하지 말고 앞에서 프로파일 창에 정의 된 경로를 나타내는 변수를 선택하십시오 . 선택한 경로는 드롭 다운 아래에 표시되지만 여기서 편집 할 수는 없습니다.
    빌드 및로드 경로가 일치하는 쌍인지 확인하십시오. 예를 들어 로컬 경로로 구축하는 경우 서버에서로드 할 수 없습니다.

 

로컬 개발 예

컨텐츠의 로컬 개발 단계를 보여주는 다음 예를 고려하십시오.


개발을 위해 로컬 및 원격 번들이 로컬로 저장된 컨텐츠

개발 중에는 아래 "로컬"행에서 볼 수 있듯이 로컬 경로를 사용하여 로컬 및 원격 번들이 모두 있습니다.


현지 개발 및 생산을위한 경로 설정.

이 경우 로컬 및 원격 경로가 실제로 로컬임을 알 수 있습니다. 원격 서버를 설정하는 것이 쉽지 않기 때문에 개발에 더 의미가 있습니다. 그러나 컨텐츠를 프로덕션 할 준비가되면 아래 다이어그램과 같이 원격 번들을 서버로 이동합니다.


원격 번들이있는 컨텐츠는 프로덕션을 위해 서버로 이동되었습니다.

이 경우 프로파일을 사용하여 "제작"의 원격로드 경로를 해당 서버로 변경할 수 있습니다. 자산 그룹을 변경하지 않고도 모든 원격 번들을 실제로 원격으로 변경할 수 있습니다.

 

Addressable Asset System 자산 사용

문자열 주소를 사용하여 게임 스크립트에서 자산에 네임 스페이스를 선언 한 후 다음 메소드를 호출하십시오.

 

지정된 주소로 자산을 메모리에 로드한다.

Addressables.LoadAssetAsync<GameObject>("AssetAddress");

 

지정된 주소로 자산을 Scene에 인스턴스한다.

Addressables.InstantiateAsync("AssetAddress");

 

둘 다 비동기 작업이며 로드가 완료되면 자산에 대한 콜백을 제공할 수 있다.

 

스프라이트 시트의 스프라이트, FBX 파일의 애니메이션 클립 같은 하위 자산에 접근하기 위해서는 특별한 구문이 필요하다.

 

자산에 모든 하위 오브젝트를로드하기 위해 다음 예제 구문을 사용할 수 있습니다. 

Addressables.LoadAssetAsync<IList<Sprite>>("MySpriteSheetAddress");

 

자산에 단일 하위 오브젝트를로드하려면 다음을 수행하십시오. 

Addressables.LoadAssetAsync<Sprite>("MySpriteSheetAddress[MySpriteName]");

 

 

Remote Catalog 

Remote, 즉 서버에서 어드레서블 번들을 다운로드를 편하게 받기 위해서는 리모트 카탈로그가 필요하다.

물론 리모트 경로에서 리모트 카탈로그를 다운로드 받지 못 하면 로컬에 존재하는 catalog.json 을 참조하여 리모트 경로에서 다운로드를 받지만 리모트에 올라온 번들들의 변경점을 반영하지 못하기 때문에 리모트 카탈로그를 따로 만들어서 다운받아서 사용하도록 해야한다.

 

만드는 설정

AddressableAssetSettings에서 Catalog - Build Remote Catalog 를 체크해줘야한다.

체크해줄 경우 Build Path 와 Load Path 가 나오며 리모트 카탈로그를 불러올 위치와 빌드할 위치를 정하면된다.

 

리모트 카탈로그의 이름은 Player Version Override 로 정해진다. 아무것도 설정하지 않을 경우 catalog_현재 날짜.json 이라는 이름으로 Build Path 에 만들어지고 version 이름을 설정해주면 (만약 test) catalog_test.json 으로 만들어진다.

 

리모트 경로에 있는 리모트 카탈로그를 우선적으로 읽는다고 하지만 리모트 경로가 런타임 중에 변경되어서 다시 어드레서블을 초기화 해주고 읽어와도 변경된 리모트 경로의 리모트 카탈로그를 자동으로 읽어오지 않으니 소스 코드상에서 따로 처리를 해줘야한다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기