为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?
Posted
技术标签:
【中文标题】为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?【英文标题】:Why loading AssetBundle to memory after downloading and unpacking results crash in iPad due to lack of Memory?为什么在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中? 【发布时间】:2018-04-26 09:45:55 【问题描述】:我们刚刚在 Unity 2D 中完成了一款 2D 游戏,但正在努力解决一些与内存相关的严重问题。
使用的 Unity 版本:Unity 2017.2.2f1
我们正在使用 AssetBundles 和 On Demand Resource 下载平均大小为 20MB 的包(纹理、精灵表、bg 图像和场景)。
我们已成功将应用商店大小限制为 90MB。在 Xcode 中分析项目时,构建占用的初始内存为 180 MB。但是当我们通过 On Demand 下载任何关卡(资产包)时,问题就开始了资源。内存使用量从 180MB 跃升至 568MB。
1.为什么unity在下载加载20MB大小的AssetBundle后会消耗388MB内存?
2.为什么每次我们加载一个新场景,unity卸载场景后都会保留一些内存,即不清除分配的块?
3. RGBA Compressed PVRTC 4 bits 在 Unity 中是否适用于 ios 设备?
5.是否有任何第三方 SDK 可以压缩 Unity 的 2D 纹理和 GUI 图形?
请帮助我,以便我可以将项目交付给客户,否则我的工作有风险:(
提前致谢。
【问题讨论】:
【参考方案1】:-
检查资产包压缩以及如何加载资产包。
压缩的资产包在内存中完全解压缩,因此建议对包使用未压缩或基于块的压缩以避免内存峰值。
Unity 使用托管内存加载和卸载事物可能会导致一些内存泄漏,因为 GC 几乎控制着一切。
PVRTC 适用于所有 IOS 设备。
既然你的目标是iOS,PVRTexTool就是你所需要的PVRTexTool Download
【讨论】:
以上是关于为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 UIDocumentInteractionController 是不是由于 iPad 上缺少外部应用程序而无法打开文档?
由于“缺少所需的图标文件”,无法分发 Xamarin iOS iPad 存档