Version: 2019.2
에셋 번들
에셋 번들을 위한 에셋 준비

에셋 번들 워크플로

중요한 참고 사항: 에셋 번들 관리자는 2018.2 이상의 Unity 버전에서 지원이 중단될 예정입니다. 에셋 스토어에서는 더 이상 제공되지 않지만, AssetBundleDemo Bitbucket 저장소에서는 계속 다운로드할 수 있습니다. Unity 버전 2018.2 이상을 사용하는 경우 어드레서블 에셋에 대한 문서를 참조하십시오.

에셋 번들을 시작하려면 다음 단계를 따르십시오. 각 워크플로 단계에 대한 자세한 내용을 보려면 문서에서 본 섹션의 다른 페이지를 참조하십시오.

에셋 번들에 에셋 할당

해당 에셋을 에셋 번들에 할당하려면 다음 단계를 따르십시오.

  1. 프로젝트 뷰에서 번들에 할당할 에셋을 선택합니다.
  2. 인스펙터의 오브젝트를 검사합니다.
  3. 인스펙터 하단의 에셋 번들 및 배리언트를 할당 섹션을 참조합니다.
  4. 왼쪽 드롭다운은 에셋 번들을 할당하고, 오른쪽 드롭다운은 배리언트를 할당합니다.
  5. “없음”으로 표시된 왼쪽 드롭다운을 클릭하여 현재 등록된 에셋 번들 이름을 표시합니다.
  6. “신규…”를 클릭하여 새로운 에셋 번들을 생성합니다.
  7. 원하는 에셋 번들 이름을 입력합니다. 입력 내용에 따라 에셋 번들 이름은 폴더 구조 타입을 지원합니다. 하위 폴더를 추가하려면 “/”를 이용해 폴더 이름을 구분합니다. 예를 들어, 에셋 번들 이름을 “environment/forest”라고 명명한 경우 environment 하위 폴더에 forest라는 이름의 번들이 생성됩니다.
  8. 에셋 번들 이름을 선택하거나 생성하면 필요에 따라 오른쪽 드롭다운에서 이 과정을 반복하여 배리언트 이름을 할당하거나 생성할 수 있습니다. 배리언트 이름은 에셋 번들을 빌드할 필요가 없습니다.

에셋 번들 할당에 대한 자세한 내용 및 관련 정보는 에셋 번들용 에셋 준비 문서를 참조하십시오. .

에셋 번들 빌드

Assets 폴더에서 Editor 폴더를 생성하고, 폴더에 다음과 같은 콘텐츠의 스크립트를 입력합니다.

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneWindows);
    }
}

이 스크립트는 해당 태그와 관련된 함수에서 코드를 실행하는 “에셋 번들 빌드”라는 에셋 메뉴의 하단에 메뉴 아이템을 생성합니다. “에셋 번들 빌드”를 클릭하면 빌드 다이얼로그와 함께 진행 표시줄이 표시됩니다. 이렇게 하면 에셋 번들 이름으로 레이블이 지정된 모든 에셋을 가져와서 assetBundleDirectory에 정의된 경로의 폴더에 배치합니다.

이 코드 동작에 대한 자세한 내용을 보려면 에셋 번들 빌드를 참조하십시오.

에셋 번들을 외부 스토리지에 업로드

이 단계는 각 사용자마다 다르므로 Unity에서 수행 방법을 알려줄 수는 없습니다. 에셋 번들을 타사 호스팅 사이트에 업로드하려면 여기에서 수행합니다. 로컬 개발을 진행 중이고 모든 에셋 번들을 디스크에 저장하려는 경우 다음 단계로 건너뜁니다.

에셋 번들 및 에셋 로딩

로컬 스토리지에서 로드하려는 사용자는 다음 AssetBundles.LoadFromFile API를 참고하실 수 있습니다.

public class LoadFromFileExample extends MonoBehaviour {
    function Start() {
        var myLoadedAssetBundle 
            = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
        if (myLoadedAssetBundle == null) {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
        Instantiate(prefab);
    }
}

LoadFromFile은 번들 파일의 경로를 가져옵니다.

에셋 번들을 직접 호스팅하고 게임에 다운로드해야 하는 경우 다음과 같은 UnityWebRequest API를 참고하실 수 있습니다. 다음은 그 예제입니다.

IEnumerator InstantiateObject()
{
    string url = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;        
    UnityEngine.Networking.UnityWebRequest request 
        = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(url, 0);
    yield return request.Send();
    AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
    GameObject cube = bundle.LoadAsset<GameObject>("Cube");
    GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
    Instantiate(cube);
    Instantiate(sprite);
}

GetAssetBundle(string, int) 은 에셋 번들의 위치와 다운로드하려는 번들 버전의 URL을 가져옵니다. 이 예제에서는 여전히 로컬 파일을 가리키고 있지만, string url은 에셋 번들을 호스팅하고 있는 URL을 가리킬 수 있습니다.

UnityWebRequest에는 요청 시 에셋 번들을 가져오는 에셋 번들인 DownloadHandlerAssetBundle을 처리하는 특별한 방법이 있습니다.

사용하는 메서드에 관계없이 이제 에셋 번들 오브젝트에 액세스할 수 있습니다. 오브젝트에서 LoadAsset<T> (string)을 사용하면 로드하려는 에셋의 타입 T와 오브젝트의 이름을 번들 안에 있는 문자열로 가져오게 됩니다. 이렇게 되면 에셋 번들에서 로드하는 오브젝트는 모두 반환됩니다. 이 반환된 오브젝트는 Unity의 모든 오브젝트와 마찬가지로 사용할 수 있습니다. 예를 들어, 씬에서 게임 오브젝트를 만들려는 경우 Instantiate(gameObjectFromAssetBundle)를 호출하면 됩니다.

에셋 번들을 로드하는 API에 대한 자세한 내용을 보려면 에셋 번들의 전문적인 활용을 참조하십시오.


  • 2017–05–15
에셋 번들
에셋 번들을 위한 에셋 준비