ダウンロードしたデータから作成したアセットバンドルからのオブジェクトがあると,三種類の方法でオブジェクトをロードできます:
AssetBundle.Load で名前の識別子を引数として使って,オブジェクトをロードします。名前はプロジェクトビューで表示されているものです。オプションとして,オブジェクトの種類を引数としてLoadメソッドに渡すことでロードされたオブジェクトが特定の種類であるかチェックすることが出来ます。
AssetBundle.LoadAsync は前述のLoadメソッドと同様に動作しますが,アセットがロードされるときにメインのスレッドをブロックしません。これは大きなアセットや複数のアセットを同時にロードするときに,アプリケーションがポーズすることを避けるのに便利です。
AssetBundle.LoadAll によりアセットバンドルに含まれるすべてのオブジェクトをロードします。 AssetBundle.Load と同様にオブジェクトをタイプによってオブジェクトをフィルタリングできます。
アセットをアンロードするためには AssetBundle.Unload を使用する必要があります。このメソッドはbooleanの引数によりUnityで全てのデータをアンロードするかどうか(ロードされたアセットのオブジェクトを含めて)か,または,ダウンロードされたバンドルから圧縮されたデータのみをアンロードするか指定します。もしアプリケーションがアセットバンドルから何らかのオブジェクトを使用していて,メモリを解放したい場合,Falseを渡してメモリから圧縮されたデータをアンロードできます。もしアセットバンドルから完全に全てをアンロードしたい場合,Trueを渡して,アセットバンドルからロードされたアセットを破棄します。
AssetBundle.LoadAsync メソッドを使用してオブジェクトを非同期ロードできて,アプリケーションが飛び飛びにおかしくなる可能性を減らします。
using UnityEngine;
// Note: This example does not check for errors. Please look at the example in the DownloadingAssetBundles section for more information
IEnumerator Start () {
// Start a download of the given URL
WWW www = WWW.LoadFromCacheOrDownload (url, 1);
// Wait for download to complete
yield return www;
// Load and retrieve the AssetBundle
AssetBundle bundle = www.assetBundle;
// Load the object asynchronously
AssetBundleRequest request = bundle.LoadAsync ("myObject", typeof(GameObject));
// Wait for completion
yield return request;
// Get the reference to the loaded object
GameObject obj = request.asset as GameObject;
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
// Frees the memory from the web stream
www.Dispose();
}