android - Unity 应用在 IOS 上比在 Android 上使用更多的内存
问题描述
我已经为 android 和 IOS 构建了一个统一的应用程序,并且 android 已经运行了好几个月了。但是 IOS 设备因 ram 溢出错误(Iphone 7 上的 EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, used=0x0))而崩溃。
我已经减少了所有的纹理大小(有些像 8k,所以这是一个显着的减少),我还压缩了所有的音频文件。这让它在本地工作,但我被应用商店拒绝,因为他们的测试设备(Ipad)崩溃了。
我在使用 Android 时从未遇到过任何问题,即使在具有未压缩纹理和音频的旧设备上也是如此,那么为什么这些问题会出现在内存使用量少得多的 IOS 设备上呢?
解决方案
压缩在 Android 和 iOS 上的工作方式非常不同。
这是iOS的一个常见问题,我自己已经与它斗争了多年。
尝试以下操作:
为了使您的图像在苹果平台上被正确压缩,它们必须是 2 的幂。在 android 上,情况并非如此。
使用统一可寻址资产系统管理您的所有图像和音频文件,并在需要时将它们加载到内存中,而不是一直在内存中。
使用精灵图集
检查您的音频文件导入设置,这是一个常见的问题。
你提到有些图像曾经是 8k 的!这太疯狂了。在我看来,即使是 4K 或 1080 也是不必要的。尝试将每个图像的最大尺寸设置为非常小,然后慢慢增加,直到您对它的外观感到满意为止。我敢打赌,你能逃脱这么小,你会感到非常惊讶。
5 号是您最好的选择,也是非常重要的学习内容。
因此,了解第 2 点很重要。如果它看起来很复杂而且工作量太大,那就制作资源较少的游戏,因为内存管理在大型游戏中是不可避免的。
推荐阅读
- python - 更改字典的键
- javascript - Javascript 副作用
- visual-studio-code - “代码 。” 无法在 Windows10 上的 Visual Code Studio 命令行中工作
- php - 如何通过 id 获取格式/证书的名称
- regex - 如何在 Hive 中使用 regexp_replace() 一次删除多个字符?
- html - 将图像定位在另一个图像上
- java - Java 中 SSL 安全服务器的客户端 - 发生“没有 X509TrustManager 实现可用异常”
- python - 如何在数据框python中一次添加多个日期行
- spring - Default SSL context init failed: SunX509 KeyManagerFactory not available
- c++ - 为什么 static_assert 在带有 const 参数的成员函数中不起作用?