반응형

섹션 7 : 에셋 번들 매니저(Asset Bundle Manager)

이곳(here)에서 다운로드 받을 수 있는 에셋 번들 매니저는, 유니티에서 에셋 번들을 효율적으로 사용할 수 있도록 만들기 위해 제작한 도구이다.


에셋 번들 매니저 패키지를 다운로드하고 임포트하면 새로운 API 호출이 추가될 뿐만 아니라 일부 에디터 기능이 추가되어 작업과정을 간소화시켜 준다. 이기능은 Assets 메뉴 옵션에서 찾을 수 있다.

새로운 섹션에는 다음과 같은 옵션들이 포함되어 있다.


시뮬레이션 모드(Simulation Mode)

시뮬레이션 모드를 활성화 하면 실제로 에셋 번들을 빌드하지 않은 상태에서도 에셋 번들 관리자가 에셋 번들과 함께 작동할 수 있게 된다. 에디터는 에셋 번들에서 등록된 에셋을 확인하고 실제 에셋 번들에서 에셋을 가져오는 대신 에셋을 직접 사용한다.\


시뮬레이션 모드를 사용함으로서 얻을 수 있는 가장 중요한 이점은 매번 에셋 번들을 다시 빌드하고 배포할 필요없이 에셋을 수정, 업데이트, 추가 및 삭제를 할 수 있다는 점이다.


에셋 번들 배리언트(Variants, 변형)는 시뮬레이션 모드에서 작동하지 않는다. 배리언트(Variants, 변형)를 사용해야 하는 경우에는 로컬 에셋 번들 서버가 필요하다.



로컬 에셋 번들 서버(Local AssetBundle Server)

에셋 번들 매니저는 에디터나 로컬 빌드(모바일 포함)에서 에셋 번들을 테스트하는데 사용할 수 있는 로컬 에셋 번들 서버를 시작할 수도 있다.


로컬 에셋 번들 서버를 작동시키기 위해서 지켜야할 점은 다음과 같이 Assets 폴더와 같은 위치의 프로젝트 루트 디렉토리에 AssetBundles라는 폴더를 만들어야 한다는 것이다 :

폴더를 생성한 이 후에 새로 만들어진 메뉴 옵션에서 Build AssetBundles를 선택하면 에셋 번들이 이 디렉토리에 빌드된다.


이제 에셋 번들을 빌드(또는 시뮬레이션 모드를 사용하기로 결정)했고 에셋 번들을 불러올 준비가 되었으니 에셋 번들 매니저를 통해 사용할 수 있는 새로운 API 호출을 살펴보자.



AssetBundleManager.Initialize()

이 함수는 AssetBundleManifest 객체를 불러온다. 에셋 번들 매니저를 사용해서 에셋에서 불러오기전에 이 함수를 호출해야 한다. 이것은 아주 간단한 예제이며 에셋 번들 매니저를 초기화하는 방법은 다음과 같다.

IEnumerator Start()

{

yield return StartCoroutine(Initialize());

}


IEnumerator Initialize()

{

var request = AssetBundleManager.Initialize();


if(request != null)

{

yield return StartCoroutine(request);

}

}

에셋 번들 매니저는 Initialize() 중에 불러오는 이 매니페스트를 사용하여 종속성 관리를 비롯한 다양한 기능을 지원한다.



에셋 불러오기(Loading Assets)

씬에 할당된 에셋 번들 이름이 있는 씬을 불러와야하는 경우 약간 다른 코드 경로를 따라야 한다. 패턴은 비슷하지만 약간의 차이가 있다. 에셋 번들에서 씬을 로드하는 방법은 다음과 같다.

IEnumerator InitializeLevelAsync(string levelName, bool isAdditive)

{

// 에셋 번들로 부터 씬을 불러오기

AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(sceneAssetBundle, levelName, isAdditive);


if(request == null)

{

yield break;

}

yield return StartCoroutine(request);

}

보다시피, 씬 불러오기는 비동기적이며 LoadLevelAsync는 씬을 불러오기 위해 StartCoroutine으로 전달되어야하는 로드 조장 요청을 반환한다.



배리언트 불러오기(Loading Variants)

에셋 번들 매니저를 사용하여 배리언트을 불러와도 씬이나 에셋에서 불러와야 하는 코드는 실제로 변경되지 않는다. 모든 작업을 수행하려면 에셋 번들 매니저의 ActiveVariants 속성을 설정해야 한다.


ActiveVariants 속성은 문자열의 배열이다. 에셋에 할당하는 동안 생성한 배리언트의 이름을 포함하는 문자열 배열을 작성하기만 하면 된다. 다음은 HD 배리언트으로 씬 에셋 번들을 불러오는 방법에 대한 예제이다.

IEnumerator InitializeLevelAsync(string levelName, bool isAdditive, string[] variants)

{

// activeVariants를 설정

AssetBundleManager.ActiveVariants = variants;

// 에셋 번들로부터 씬 불러오기

AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(variantSceneAssetBundle, levelName, isAdditive);


if(request == null)

{

yield break;

}

yield return StartCoroutine(request);

}

문자열 배열을 전달할 곳은 코드의 다른 부분이다(아마도 버튼 클릭이나 다른 상황). 이것으로 active variants와 일치하는 에셋 번들을 불러오게 될 것이다.




반응형

+ Recent posts