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

アセットバンドルのワークフロー

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

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

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

  1. Project ビューから、バンドルに割り当てたいアセットを選択します。
  2. インスペクターで該当オブジェクトを確認してください。
  3. インスペクターの下部に、アセットバンドルとバリアントの割り当てを行うセクションがあります。
  4. 左側のドロップダウンでアセットバンドルの割り当てを行い、右側のドロップダウンメニューでバリアントの割り当てを行います。
  5. 左側のドロップダウンメニューで “None” をクリックすると、現在登録されているアセットバンドルの名前の一覧が表示されます。
  6. まだ何も作成されていない場合は、上記の画像のような一覧が表示されます。
  7. “New…” をクリックすると新しいアセットバンドルが作成されます。
  8. 任意のアセットバンドル名を入力してください。アセットバンドル名は、入力の仕方によって、特定のフォルダー構造に対応することができます。サブフォルダーを追加するには、フォルダー名を “/” で区切ってください。例えば、 “environment/forest” というアセットバンドル名は、environment というサブフォルダーの下に forest という名前のバンドルを作成します。
  9. アセットバンドル名の選択または作成後、バリアント名の割り当てや作成を行いたい場合は、右側のドロップダウンメニューから同じ手順で行うことができます。バリアント名はアセットバンドルのビルドには必要ではありません。

アセットバンドルを割り当てる上での各種方法についての詳細は、このドキュメンテーションのアセットバンドル用のアセットの準備に関するページをご覧ください 。

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

Assets フォルダー内に Editor という名前のフォルダーを作成し、そのフォルダー内に、以下を含むスクリプトを置いてください。

using UnityEditor;

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

このスクリプトは、 Assets メニューの下部に “Build AssetBundles” というメニューアイテムを作成します。このメニューアイテムは、コードを、そのタグに関連付けられた関数内で実行します。 Build AssetBundles をクリックすると、ビルドダイアログとともにプログレスバーが表示されます。これが、ある特定のアセットバンドル名でラベル付けされたアセットの全てを取得し、 assetBundleDirectory によって定義されたパスにある 1 つのフォルダー内にそれらを配置します。

このコードの機能についての詳細は、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 uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;        
        UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
        yield return request.Send();
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        GameObject cube = bundle.LoadAsset("Cube");
        GameObject sprite = bundle.LoadAsset("Sprite");
        Instantiate(cube);
        Instantiate(sprite);
    }

GetAssetBundle(string, int) はアセットバンドルの場所の URI およびダウンロードしたいバンドルのバージョンを必要とします。この例ではローカルファイルを指していますが、文字列 URI はアセットバンドルがホスティングされている URL のどれでも指すことができます。

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

使用するメソッドに関わらず、これでアセットバンドルオブジェクトが利用可能になりました。そのオブジェクトから LoadAsset<T>(string) を使用する必要があります。この LoadAsset<T>(string) は、読み込もうとしているアセットのタイプ( T ) と、文字列(string)としてバンドル内のオブジェクトの名前を必要とします。これは、アセットバンドルから読み込んでいるオブジェクトを、どんなものでも返します。この返されたオブジェクトは、Unity 上の他のオブジェクトと全く同じように使用できます。例えば、シーン内でゲームオブジェクトを作成したい場合は、単純に Instantiate(gameObjectFromAssetBundle) を呼び出すだけで行うことができます。

アセットバンドルを読み込む API に関する詳細は、Unity ドキュメンテーションのアセットバンドルをネイティブで使用するの項をご覧ください。


  • <span class=“page-edit”>2017–05–15 <!– include IncludeTextNewPageNoEdit –></span>
アセットバンドル
アセットバンドル用のアセットの準備
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961