유니티 Addressable 사용법 - yuniti Addressable sayongbeob

Unity

[Unity] Addressable Asset System ( 어드레서블 어셋 시스템 )

EveryDay.DevUp 2020. 5. 24. 01:19

● Unity Addressable Asset System 정의

- Asset을 불러올 때 address ( 사용자가 정한 이름 ) 에 따라 Asset이 Resources에 위치하던지, Asset Bundle에 위치하던지에 관계 없이 쉽게 불러와서 사용할 수 있는 시스템

● Asset의 정의

- Asset은 프로젝트/Assets 안에 있는 Prefabs, Textures, Materials, Audio Clips Animations 등을 말함

● 기존 Asset Workflow

- 기존 Unity에서 Asset을 사용하는 방식에는 3가지가 있다

: 간단한 테스트를 위해 버튼을 누르면 Cube Object를 생성하는 코드를 작성

: Resources/Cube Prefab을 생성

1. Unity Editor의 Inspector 창에서 필요한 어셋을 드래그&드랍으로 참조 연결 시켜서 사용하는 방식

using UnityEngine; public class Test : MonoBehaviour { public GameObject cube; public Transform posTrans; public void OnCreate() { GameObject obj = GameObject.Instantiate( cube ); } }

▶ 씬을 로드할 때 참조하고 있는 Cube Prefab이 메모리 상에 올라오게 됨

2. Resources.Load 함수를 사용하여 Resources 폴더에 있는 Asset를 가져오는 방식

using UnityEngine; public class Test : MonoBehaviour { GameObject cube; public void OnCreate() { cube = Resources.Load( "Cube" ) as GameObject; GameObject obj = GameObject.Instantiate( cube ); } }

▶ 필요한 어셋을 코드에서 필요한 때에 불러와서 사용할 수 있다.

3. 어셋번들에서 Asset을 로드해서 사용하는 방식

▶ 아래의 예제는 테스트용으로 간결하게 작성한 방식으로 실제 사용 시에는 여러가지 예외 상황을 고려한 과정들이 필요하다.

[ Cube Prefab에 AssetBundle의 이름 cubeasset 설정 ]using UnityEditor; public class AssetBundleEditor : Editor { [@MenuItem( "Asset/Build AssetBundles" )] public static void AssetBundleCreate() { BuildPipeline.BuildAssetBundles( "Assets/AssetBundle", BuildAssetBundleOptions.StrictMode, BuildTarget.Android ); } }
[ 어셋 번들 생성]
[ 만들어진 어셋번들 ]using UnityEngine; using System.IO; public class Test : MonoBehaviour { AssetBundle bundle; GameObject cube; public void OnCreate() { if( cube == null ) { bundle = AssetBundle.LoadFromMemory( File.ReadAllBytes( "Assets/AssetBundle/cubeasset" ) ); cube = bundle.LoadAsset<GameObject>( "Cube" ); } GameObject obj = GameObject.Instantiate( cube ); } }

▶ 필요한 어셋을 어셋번들로 묶고, 코드에서 어셋번들을 로드한 후 필요한 어셋을 찾아서 불러와서 사용할 수 있다.

● 기존 Asset Workflow 비교

● 추가된 Addressable Asset System 의 특징

: 리소스 폴더의 장점 + 어셋 번들의 장점 + 개발 편의성을 가진 시스템

: 프로파일러 제공을 통한 어셋의 종속성 파악 및 메모리 로드/언로드 현황 파악

[ Addressable은 어셋과 주소의 매핑 정보를 가짐, 리소스 매니저는 어셋들을 Unity에서 로드할 수 있는 정보를 가짐 ]

●  Addressable Asset System 의 Workflow

[ Package Manager에서 Addressable 패키지를 Import ]
[ 사용할 Asset의 Addressable 옵션을 키고 주소를 부여 ]using UnityEngine; using UnityEngine.AddressableAssets; public class Test : MonoBehaviour { GameObject cube; public void OnCreate() { Addressables.InstantiateAsync( "Assets/Cube/Cube.prefab" ); } }

▶ 매우 간단한 코드로 어셋의 위치에 관계없이 어셋을 로드해서 사용할 수 있는 시스템이 어드레서블 어셋 시스템이다.

▣ 해당 글에서는 시스템의 비교 및 소개를 위해 예외 상황을 고려하지 않은 매우 간단한 예제를 사용하였다. 실제 사용 시에는 여러가지 고려가 필요할 것으로 생각된다.

참고 자료 : //docs.unity3d.com/Packages//manual/AddressableAssetsOverview.html

Addressable Assets Overview | Package Manager UI website

Addressable Assets Overview The Addressable Assets System consists of two packages: Addressable Assets package (primary package) Scriptable Build Pipeline package (dependency) When you install the Addressable Assets package, the Scriptable Build Pipeline p

docs.unity3d.com

참고 자료 : //www.youtube.com/watch?v=yoBzTpJYN44

Toplist

최신 우편물

태그