我们将资产包存储在 Amazon S3 存储桶中。游戏开始时,它会使用 WWW.LoadFromCacheOrDownload 确定需要下载哪些包的新版本。
我们遇到的问题是 iOS 报告它为我们的应用程序分配的内存不断增加,但是 Unity 报告它正在使用的内存(通过分析器)总是保持不变。我们有足够的捆绑包,当它完成下载我们需要的所有内容时,它总是会收到来自 iOS 的内存警告,不久之后我们就会因为内存压力而关闭。
我们已有的常见解决方案:WWW 完成后卸载assetbundle,使用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。这一切都在一个场景中,其中只有一个用于初始化脚本的游戏对象(没有艺术或任何东西)。
https://www.dropbox.com/s/3b6skexz6xhug5g/Screenshot%202014-03-28%2014.54.26.png