Version: 2020.2
アセットバンドル
アセットバンドル用のアセットの準備

AssetBundle workflow

AssetBundle (アセットバンドル) を使用するには、以下の手順で行います。各手順に関する詳細情報は、本セクションの他のページを参照してください。

アセットバンドルにアセットを割り当てる

AssetBundle (アセットバンドル) へのアセットの割り当ては、以下の手順で行います。

  1. Select the Asset you want to assign to a bundle from your Project View.
  2. Examine the object in the Inspector.
  3. At the bottom of the Inspector, there is a section to assign AssetBundles and Variants. Use the left-hand drop down to assign the AssetBundle, and the right-hand drop down to assign the variant.
  4. Click None on the left-hand drop to reveal the currently registered AssetBundle names.
  5. Click New to create a new AssetBundle
  6. Type in the desired AssetBundle name. Note: AssetBundle names support a type of folder structure depending on what you type. To add sub-folders, separate folder names by a /. For example, use the AssetBundle name environment/forest to create a bundle named forest under an environment sub-folder
  7. Once you’ve selected or created an AssetBundle name, you can repeat this process for the right hand drop down to assign or create a Variant name, if you desire. Variant names are not required to build the AssetBundles

To read more information on AssetBundle assignments and accompanying strategies, see documentation on Preparing Assets for AssetBundles.

アセットバンドルをビルドする

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);
    }
}

This script creates a menu item at the bottom of the Assets menu called Build AssetBundles that executes the code in the function associated with that tag. When you click Build AssetBundles a progress bar appears with a build dialog. This takes all the Assets you labeled with an AssetBundle name and places them in a folder at the path assetBundleDirectory defines.

For more details about this, see documentation on Building AssetBundles.

アセットバンドルとアセットをロードする

If you want to load from local storage, use the AssetBundles.LoadFromFile API, which looks like this:

public class LoadFromFileExample : 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 はバンドルファイルのパスを必要とします。

If you’re hosting your AssetBundles yourself and need to download them into your application, use the UnityWebRequest API. Here’s an example:

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) takes the URL of the location of the AssetBundle and the version of the bundle you want to download. This example still points to a local file but string url could point to any URL you have your AssetBundles hosted at.

UnityWebRequest はアセットバンドルを扱うためのハンドルである DownloadHandlerAssetBundle を持っています。これがリクエストからアセットバンドルを取得します。

Regardless of the method you use, you now have access to the AssetBundle object. From that object you need to use LoadAsset<T>(string) which takes the type, T, of the asset you’re attempting to load and the name of the object as a string that’s inside the bundle. This returns whatever object you’re loading from the AssetBundle. You can use these returned objects just like any object inside of Unity. For example, if you want to create a GameObject in the scene, you just need to call Instantiate(gameObjectFromAssetBundle).

アセットバンドルをロードする API に関する詳細は、Unity ドキュメンテーションの アセットバンドルを使いこなす を参照してください。

アセットバンドル
アセットバンドル用のアセットの準備