アセットバンドルは Amazon S3 バケットに保存されています。ゲームが開始されると、WWW.LoadFromCacheOrDownload を使用して、新しいバージョンをダウンロードする必要があるバンドルが決定されます。
私たちが直面している問題は、iOS がアプリに割り当てたメモリのレポートが増え続けていることですが、Unity が (プロファイラーを通じて) 使用しているとレポートするメモリは常に同じままです。必要なものすべてのダウンロードが完了するまでに十分な数のバンドルがあり、常に iOS からメモリ警告を受け取り、すぐにメモリ不足のためにシャットダウンされます。
一般的な解決策としては、WWW の終了後にアセットバンドルをアンロードする、assetBundle.unload() を使用する、Resources.UnloadUnusedAssets() を呼び出す、および WWW で Dispose() を呼び出すことです。どれも問題を解決していません。
コードは次のとおりです。
private IEnumerator DownloadBundle(DownloadQueueEntry entry, DownloadFinishedCallback callback)
{
while (!entry.finished)
{
// grab bundle off S3
string url = string.Format(BUNDLE_URL_FORMAT, entry.directory, entry.assetName);
WWW www = WWW.LoadFromCacheOrDownload(url, entry.version);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
Debug.Log("[BundleDownloader] Download Completed " + entry.assetName);
entry.finished = true;
entry.downloading = false;
www.assetBundle.Unload (true);
Resources.UnloadUnusedAssets ();
}
else
{
// usually timed out resolving host, just try again for now
Debug.LogError("[BundleDownloader] Download failed: " + url + " Error: " + www.error);
}
www.Dispose();
www = null;
}
if(callback != null)
{
callback ();
}
}
- 編集 -
メモリ使用量の増加を示すスクリーンショットは、以下のリンクにあります。メモリ使用量は、約 150MB になるまでこのように進みます。これはすべて、init スクリプト用の GameObject しかない (アートも何もない) シーンの中にあります。
https://www.dropbox.com/s/3b6skexz6xhug5g/Screenshot%202014-03-28%2014.54.26.png