사용하는 다양한 유니티 에셋들을 하나로 묶어서 압축한 것이다.

예 : 모델링 객체, 프리팹, 오디오, 텍스처, 씬 등…

에셋 번들 사용 방법

  1. 에셋 번들로 관리할 에셋을 선택한다.
  2. inspector 아래를 본다면 Asset Bundle을 None이 아닌, 에셋 분류에 따라 이름을 지정해준다.
  3. 에셋 번들을 만드는 기능은 에디터에 기본 기능이나, 유니티 기본 패키지가 아니기에, 스크립트로 구현해주어야 한다. 구현해준 스크립트는 Assets의 Editor이라는 폴더에 생성해 주어야 한다.
  4. 에셋을 우클릭 해서, BuildAssetBundle을 해주면, 선택한 에셋의 에셋 번들이 만들어진다. 하나의 에셋 번들을 만들게 되면 자동으로, 각각의 에셋 번들의 종속성을 나타내는 Asset Bundles라는 에셋 번들이 생성된다.

에셋 번들 스크립트

using UnityEditor;
using System.IO;
public class CreateAssetBundle
{
    [MenuItem("Assets/Build New AssetBundle")]
    public static void BuildAssetBundle()
    {
        string assetBundleDirectory = "Assets/AssetBundles";

        if (!Directory.Exists(assetBundleDirectory)) { Directory.CreateDirectory(assetBundleDirectory); }

        BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.Android);
        AssetDatabase.Refresh();
    }
}

에셋 번들을 불러오는 스크립트

using System.Collections;
using UnityEngine;
public class LoadAssetBundle : MonoBehaviour
{
    public string bundleName = "mybundle";
    public string assetName = "myasset";
    
    private void Start()
    {
        StartCoroutine(LoadAssetBundle());
    }
    private IEnumerator LoadAssetBundle()
    {
        string assetBundlePath = Path.Combine(Application.dataPath, "AssetBundles", bundleName);

        AssetBundleCreateRequest assetBundleLoadRequest = bundle.LoadFromFileAsync(path);
        
        yield return bundleLoadRequest;

        AssetBundle bundle = assetBundleLoadRequest.assetBundle;
        
        if (bundle == null) { yield break; }
        
        AssetBundleRequest assetLoadRequest = bundle.LoadAssetAsync<GameObject>(assetName);
        
        yield return assetLoadRequest;

        GameObject loadedAsset = assetLoadRequest.asset as GameObject;
        
        Instantiate(loadedAsset);

        bundle.Unload(false);
    }
}