로컬 저장소의 에셋 번들로부터 씬을 불러오는 방법
유니티(Unity)에서 씬(Scene) 역시 에셋 번들(Asset Bundle)에 포함 될 수 있다. 그 기본적인 방법은 유니티 5.6 문서의 섹션 7에 나와있다. 하지만 그 방법은 에셋 번들 매니저(Asset Bundle Manager)를 이용해야 하는 방법이고 너무 대략적인 내용이라 따라 실행하는 데에만 많은 시행 착오를 겪게 된다. 이 문서에서는 그에 비해 비교적 간단하고 즉시 활용할 수 있는 코드를 보여주고자 한다.
다음의 내용이 알려주고자 하는 코드의 전체이다 :
using System.IO;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class AssetLoader : MonoBehaviour{
[SerializeField]
string[] assetBundleNames;
[SerializeField]
string assetBundleDirectory = "Assets/AssetBundles";
void Start()
{
LoadSceneFromAssetBundle("불러오고자 하는 씬의 이름", false);
}
public void LoadSceneFromAssetBundle(string sceneName, bool isAdditive)
{
// 저장한 에셋 번들로부터 에셋 불러오기
// gamescene.unity는 작성자가 로컬 저장소에 저장한 게임 씬들이 들어있는 에셋 번들이다.
AssetBundle assetBundle = AssetBundle.LoadFromFile(Path.Combine(assetBundleDirectory + "/", "gamescene.unity3d"));
// 에셋 번들 내에 존재하는 씬의 경로를 모두 가져오기
string[] scenes = assetBundle.GetAllScenePaths();
string loadScenePath = null;
foreach (string sname in scenes)
{
if (sname.Contains(sceneName))
{
loadScenePath = sname;
}
}
if (loadScenePath == null) return;
LoadSceneMode loadMode;
if (isAdditive) loadMode = LoadSceneMode.Additive;
else loadMode = LoadSceneMode.Single;
SceneManager.LoadScene(loadScenePath, loadMode);
}
}
위의 코드를 활용하면 에셋 번들에 포함된 씬을 불러오는 것이 가능해진다. 다만, 게임 씬 에셋 번들이 다른 에셋 번들에 대한 종속성(Dependencies)를 가지고 있다면 씬을 불러오기 이전에 종속성을 가지고 있는 에셋 번들들을 먼저 불러와야만 한다. 만약 그렇게 하지 않으면, 불러오지 못한 오브젝트들은 게임 씬에서 missing으로 처리되어 빈 오브젝트로 나타나게 될 것이다.
예시로 보여준 코드에서는 게임 씬 에셋 번들을 불러오고 곧바로 에셋 번들 내에 존재하는 씬의 경로를 모두 탐색해서 씬을 불러왔지만 다른 방법으로는 게임이 시작되었을 때 게임 씬 에셋 번들을 불러와서 게임 씬들의 목록을 구성한 뒤에 필요할 때마다 활용하는 방식으로 사용할 수도 있다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Unity3D > AssetBundles' 카테고리의 다른 글
[Unity3D] 에셋 번들 중 원하는 번들만 빌드하기 (1) | 2017.12.17 |
---|---|
[Unity3D] AssetBundleManifest 제대로 불러오는 방법(5.6기준) (7) | 2017.04.30 |
[Unity3D] UnityWebRequest를 이용해서 원격 서버에서 받아온 에셋 번들을 로컬 저장소에 저장하는 방법(5.6기준) (16) | 2017.04.27 |
[Unity3D] 에셋 번들(섹션9)(5.6 초안 문서 번역) (0) | 2017.04.26 |
[Unity3D] 에셋 번들(섹션8)(5.6 초안 문서 번역) (0) | 2017.04.26 |