Total: Today: Yesterday:
개발/Unity | 2020. 6. 9. 13:03 | Posted by 자수씨

영여 실력이 번역할 정도는 아니지만 내용 파악을 위해 진행한다.

 

 

Addressable Assets (이하 어드레서블 에셋) 의 주요 이점은 컨텐츠의 배열, 빌드 그리고 로드하는 방법을 분리하는 것이다. 전통적으로 이러한 개발 측면에서는 이런 것들이 밀접하게 연관되어 있었다.

전통적인 에셋 관리

Resource 디렉토리에 컨텐츠를 배열하면 기본 애플리케이션에 내장되며 리소스에 대한 경로를 파라미터로 사용하는 Resources.Load 메소드를 사용하여 컨텐츠를 로드해야 한다. 다른 곳에 저장된 컨텐츠를 접근하려면 직접 참조나 asset bundle (이하 에셋 번들) 을 사용한다. 에셋 번들을 사용하는 경우 리소스 로드와 구성 전략을 함께 묶어 경로 별로 다시 로드한다. 에셋 번들이 원격 환경에 있거나 다른 번들에 종송된 경우 모든 번들의 다운로드, 로드 및 언로드를 관리하는 코드를 작성해야 한다.

어드레서블 에셋 관리

에셋에 주소를 부여하면 프로젝트의 위치나 에셋 빌드 방법과 상관없이 해당 주소를 사용하여 로드할 수 있다. 어드레서블 에셋의 경로나 파일이름을 문제 없이 변경할 수 있다. 또한 로딩하는 코드 변경 없이 리소스 폴더 또는 로컬 빌드 대상에서 다른 빌드 위치 (원격 환경 포함) 로 어드레서블 에셋을 이동할 수 있다.

에셋 그룹 스키마 (Asset Group schemas)

스키마는 일련의 데이터를 정의한다. 인스펙터에서 스키마를 자산 그룹에 연결할 수 있다. 예를 들어 packed 모드로 빌드할 때 BundledAssetGroupSchema 스키마가 첨부된 그룹은 에셋 번들의 소스로 작동한다. 새로운 그룹을 정의하는데 사용하는 템플릿으로 스키마 집합을 결합할 수 있다. AddressableAssetsSettings 인스펙터를 통해 스키마 템플릿을 추가할 수 있다.

빌드 스크립트 (Build scripts)

빌드 스크립트는 프로젝트 내에 IDataBuild 인터페이스를 구현한 ScriptableObject 에셋으로 표시된다. 사용자는 자신만의 빌드 스크립트를 생성하고 인스펙터를 통해 AddressableAssetsSettings 객체에 추가할 수 있다. Addressable Groups window (Window > Asset Management > Addressables > Groups) 에서 빌드 스크립트를 적용하려면, 플레이 모드 스크립트(Play Mode Script)와 드롭다운 옵션을 선택한다. 현재 전체 애플리케이션 빌드를 지원하기 위해 구현된 세 가지 스크립트와 에디터에서 반복하기 위한 세 가지 플레이 모드 스크립트가 있다.

플레이 모드 스크립트 (Play mode scripts)

어드레서블 에셋 패키지에는 앱 개발 속도를 높이는 플레이 모드 데이터를 만드는 데 도움을 주는 세 가지 빌드 스크립트가 있다.

에셋 데이터 베이스 사용 (Use Asset Database, faster)

빠른 모드 (BuildScriptFastMode) 를 사용하면 게임 흐름을 진행하면서 빠르게 실행할 수 있다. 빠른 모드는 분석이나 에셋 생성 없이 빠른 반복을 위해 에셋 베이터베이스를 이용하여 에셋을 직접 로드한다.

그룹 시뮬레이션 (Simulate Group, advanced)

가상 모드 (BuildScriptVirtualMode) 는 에셋 번들을 생성없이 컨텐츠를 레이아웃과 종속성을 위한 컨텐츠를 분석한다. 마치 에셋 ResourceManager 가 번들을 통해 로드 된 것 처럼 에셋 데이터베이스에서 로드한다. 게임 플레이 중 번들이 언제 로드 또는 언로드되는지는 Addressable Event Viewer window (Window > Asset Mangement > Addressables > Event Viewer) 에서 에셋 사용량을 확인할 수 있다.

가상모드를 사용하면 로드 전략을 시뮬레이션하고 컨텐츠 그룹을 조정하여 제품 릴리즈에 적합한 균형을 찾을 수 있다.

기존 빌드 사용 (Use Existing Build, requires built groups)

압축 재생 모드 (BuildScriptPAckedPlayMode) 는 이미 구축된 에셋 번들을 사용한다. 이 모드는 배포된 애플리케이션 빌드와 가장 일치하지만 별도의 단계로 데이터를 빌드해야 한다. 에셋을 수정하지 않으면 이 모드는 플레이 모드로 들어갈 때 데이터를 처리하지 않기 때문에 가장 빠르다. Build > New Build > Default Build Script 를 선택하거나 게임 스크립트의 메소드를 사용하여 Addressable window (Window > Asset Management > Addressables > Groups) 에서 AddressableAssetSettings.BuildPlayerContent() 메소드를 이용하여 이 모드의 컨텐츠를 빌드해야 한다.

분석 및 디버깅 (Analysis and debugging)

기본적으로 어드레서블 에셋은 경고/에러에 대해 기록만 한다. 상세 로그를 활성화 하기 위해서는 Player settings window (Edit > Project Settings... > Player) 을 열고 Other Settings > Configuration 섹션으로 이동한 후 Scripting Define Symbols 필드에 ADDRESSABLES_LOG_ALL 를 추가한다.

초기화 객체 (Initialization objects)

어드레서블 에셋 설정에 객체를 첨부하고 런터임에 초기화 프로세스로 전달할 수 있다. CacheInitializationSettings 객체는 런타임 시 유니티의 캐싱 API 를 제어한다. 자체 초기화 객체를 만드려면 IObjectInitializationDataProvider 인터페이스를 구현하는 ScriptableObject 를 만든다. 이는 런타임 데이터로 직렬화된 ObjectInitializationData 를 생성을 담당하는 시스템의 Editor 구성요소이다.

커스터마이징 URL 평가 (Customizing URL Evaluation)

런타임 시에 에셋 (일반적으로 에셋 번들) 의 경로 또는 URL 을 커스터마이징 해야 하는 몇 가지 시나리오가 있다. 가장 일반적인 예는 서명된 URL 을 생성하는 것이다. 다른 하나는 동적 호스트 결정일 수 있다.

아래 코드는 모든 URL 에 쿼리 문자열을 추가하는 예이다.

//Implement a method to transform the internal ids of locations
string MyCustomTransform(IResourceLocation location)
{
    if (location.ResourceType == typeof(IAssetBundleResource) && location.InternalId.StartsWith("http"))
        return location.InternalId + "?customQueryTag=customQueryValue";
    return location.InternalId;
}

//Override the Addressables transform method with your custom method.  This can be set to null to revert to default behavior.
[RuntimeInitializeOnLoadMethod]
static void SetInternalIdTransform()
{
    Addressables.InternalIdTransformFunc = MyCustomTransform;
}

※ Android 플랫폼에서 비디오 파일을 로드할 목적으로 비디오 파일을 어드레서블 파일에 번들로 묶을 경우 CacheInitializationSettings 객체를 생성하고 해당 객체에 Compress Bundles 를 비활성화한 후 ddressableAssetSettings 객체의 초기화 객체 목록에 추가한다. (아직 없는 경우)

 

 

참고자료: https://docs.unity3d.com/Packages/com.unity.addressables@1.9/manual/AddressableAssetsDevelopmentCycle.html

 

Addressable Assets development cycle | Addressables | 1.9.2

Addressable Assets development cycle One of the key benefits of Addressable Assets is decoupling how you arrange, build, and load your content. Traditionally, these facets of development are heavily tied together. Traditional asset management If you arrang

docs.unity3d.com