アセットバンドルを遠隔サーバーからダウンロードするには UnityWebRequest.AssetBundle
を利用できます。この関数はデータを内部バッファにストリーミングし、内部バッファではアセットバンドルのデータをワーカースレッドでデコードし解凍します。
関数の引数にはいくつかの形式があります。最も単純な形式では、アセットバンドルをダウンロードする URL だけが必要です。必要に応じて、ダウンロードしたデータの整合性を確認するためのチェックサムを追加することもできます。
また、アセットバンドルのキャッシュシステムを使用する場合は、バージョン番号、または Hash 128 データ構造のいずれかを提出します。これらは WWW.LoadFromCacheOrDownload
をとおして古いシステムに提供されたバージョン番号、または Hash128 オブジェクト
と一致します。
UnityWebRequest
を作成し、ターゲット URL を指定された URL 引数に設定します。また、HTTP 動詞を GET
に設定しますが、他のフラグやカスタムヘッダーは設定しません。UnityWebRequest
に DownloadHandlerAssetBundle
を添付します。このダウンロードハンドラーには特別な assetBundle
プロパティーがあり、アセットバンドル内のリソースへのアクセスを許可するのに十分なデータがダウンロードされデコードされると、アセットバンドルを抽出するために使用できます。Hash128
オブジェクトを指定すると、これらの引数も DownloadHandlerAssetBundle
に渡されます。 すると、ダウンロードハンドラーは、キャッシュシステムを使用します。using UnityEngine;
using System.Collections;
using Unity.Networking;
class MyBehaviour: MonoBehaviour {
void Start() {
StartCoroutine(GetAssetBundle());
}
IEnumerator GetAssetBundle() {
UnityWebRequest www = UnityWebRequest.GetAssetBundle("http://www.my-server.com/myData.unity3d");
yield return www.Send();
if(www.isError) {
Debug.Log(www.error);
}
else {
AssetBundle bundle = ((DownloadHandlerAssetBundle)www.downloadHandler).assetBundle;
}
}
}
または、補助的な getter を使って GetAssetBundle
を実装することもできます。
IEnumerator GetTexture() {
UnityWebRequest www = UnityWebRequest.GetAssetBundle("http://www.my-server.com/myData.unity3d");
yield return www.Send();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www);
}