AssetBundle (アセットバンドル) を使用するには、以下の手順で行います。各手順に関する詳細情報は、本セクションの他のページを参照してください。
AssetBundle (アセットバンドル) へのアセットの割り当ては、以下の手順で行います。
/
で区切ります。例えば、environment/forest
というアセットバンドル名は、environment
というサブフォルダー配下に forest
という名前のバンドルを作成します。アセットバンドルを割り当てる上での各種方法についての詳細は、このドキュメンテーションの アセットバンドル用のアセットの準備 のページを参照してください。 。
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);
}
}
このスクリプトは、 アセット メニューの下部に Build AssetBundles というメニュー項目を作成し、そのタグに関連付けられた関数のコードを実行します 。 Build AssetBundles をクリックすると、プログレスバーがビルドダイアログとともに表示されます。これにより、AssetBundle 名でラベル付けしたすべてのアセットを取得し、assetBundleDirectory
が定義するパスのフォルダーに置きます。
詳細は、上の アセットバンドルをビルドする を参照してください。
ローカル ストレージからロードしたい場合は、以下のように AssetBundles.LoadFromFile
APIを使用します。
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
はバンドルファイルのパスを必要とします。
アセットバンドルを独自にホスティングしていて、それをアプリケーションにダウンロードする必要がある場合は、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)
を使用する必要があります。この LoadAsset<T>(string)
は、ロードしようとしているアセットのタイプ T
と、文字列 (string) としてバンドル内のオブジェクトの名前を必要とします。これは、アセットバンドルから読み込んでいるオブジェクトを、どんなものでも返します。この返されたオブジェクトは、Unity 上の他のオブジェクトと全く同じように使用できます。例えば、シーン内でゲームオブジェクトを作成したい場合は、単純に Instantiate(gameObjectFromAssetBundle)
を呼び出すだけで行うことができます。
アセットバンドルをロードする API に関する詳細は、Unity ドキュメンテーションの アセットバンドルを使いこなす を参照してください。