Unity 应用在 IOS 上比在 Android 上使用更多的内存

Posted

技术标签:

【中文标题】Unity 应用在 IOS 上比在 Android 上使用更多的内存【英文标题】:Unity app uses far more memory on IOS than on Android 【发布时间】:2021-03-06 03:18:28 【问题描述】:

我已经为 androidios 构建了一个统一的应用程序,并且 android 已经运行了好几个月了。但 IOS 设备因 ram 溢出错误(Iphone 7 上的 EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, used=0x0))而崩溃。

我已经减少了所有的纹理大小(有些像 8k,所以这是一个显着的减少),我还压缩了所有的音频文件。这让它在本地工作,但我被应用商店拒绝让他们的测试设备(Ipad)崩溃。

我在使用 Android 时从未遇到过任何问题,即使在具有未压缩纹理和音频的旧设备上也是如此,那么为什么这些问题会出现在内存使用量少得多的 IOS 设备上呢?

【问题讨论】:

【参考方案1】:

压缩在 Android 和 iOS 上的工作方式非常不同。

这是 iOS 的一个常见问题,我自己与它斗争了多年。

尝试以下方法:

    为了让您的图像在苹果平台上正确压缩,它们必须是 2 的幂。在 android 上不是这样。

    使用统一addressable asset system 管理您的所有图像和音频文件,并在需要时将它们加载到内存中,而不是一直在内存中。

    使用精灵图集

    检查您的音频文件导入设置,这是一个常见问题。

    您提到某些图像曾经是 8k!这疯狂的大。在我看来,即使是 4K 或 1080 也是不必要的。尝试将每个图像的最大尺寸设置为非常小,然后慢慢增加,直到您对它的外观感到满意为止。我敢打赌,您会非常惊讶于您可以逃脱的小规模。

5 号是您最好的选择,也是非常重要的学习内容。

所以要知道第 2 点很重要。如果它看起来很复杂且工作量太大,那就制作包含更少资源的游戏,因为内存管理在大型游戏中是不可避免的。

【讨论】:

您好,首先感谢您的反馈。同样的问题以前被忽略了。我尝试了方法 5,并将所有纹理减少到 512,法线贴图为 256 等。我还减少了音频和网格。但问题依然存在。与 android 的区别让我感到困惑,让我觉得我一定错过了一些导致这种疯狂的 ram 使用的东西。加载包含音频文件和动画(网格等)的可编写脚本的对象时会出现问题,是否可以切换到常规存储而不是 ram 或其他东西?无论如何,请看@the sugges 是的,我的回答中的结帐点 2,这将允许您将内容存储在存储中,并在需要时将它们加载到内存中。不幸的是,ram 在 iOS 中的工作方式与 android 根本不同,你无法真正比​​较它们。 另外,学习使用 unity profiler,那么你就不必猜测内存被占用了,它只会告诉你到底发生了什么 是的,我已经知道探查器有一段时间了,但是这个问题迫使我现在才真正开始使用它。在这种情况下,它对我没有多大帮助,但绝对是使用它的最佳实践。提示编号 2 是我希望解决我的问题的提示,我会明确地调查它。非常感谢您的帮助!

以上是关于Unity 应用在 IOS 上比在 Android 上使用更多的内存的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 C++ 程序在 Windows 上比在 Linux 上慢?

我的 OpenCL 代码在 GPU 上比在 CPU 上慢

HTML5 Canvas 在 Firefox 上比在 Chrome 上更快!为啥?

为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢

SSE 程序在 AMD 上比在 Intel 上花费的时间要长得多

在 iOS 上下载失败比在 Android 上更频繁?