当内存超过40MB时,基于Unity的应用程序在iPad 1上崩溃

问题描述:

我知道这可能相当Unity,但我在这里问的原因是因为这更多的是关于iPad和内存使用情况的一般问题......当内存超过40MB时,基于Unity的应用程序在iPad 1上崩溃

我们有一个Unity3D游戏项目(不是由我创建的,但我试图帮助解决它为什么会崩溃)。它包含大约8个纹理,任何时候都可以加载,全部尺寸为512x512。游戏中屏幕上可能不会有超过10,000个多边形。

当我们通过iPad 2上的乐器运行时,它达到了60 MB左右的高峰,这看起来好像在该机器的内存容量范围内。但是,当我们尝试在iPad 1上运行它时,即使在重新启动以清除内存后,Instruments也会在它崩溃之前显示大约40 MB的负载。

为什么iPad 1无法应付超过40 MB的空间会有什么原因?我知道iPad 1只有256 MB,与iPad 2的512 MB相比只有256 MB,但当然这仍然在设备的能力范围内?

编辑:iPad 1运行iOS 4.2.1,iPad 2运行iOS 5.1。

我们不知道安装在iPad 1上的iOS版本,它可以改变操作系统使用的基本内存。

根据我的经验,40MB的限制与我在使用256MB内存的Apple设备上看到的30-50MB范围是一致的,在调用内存警告之前。

+0

这是有用的知道,谢谢。 iPad 1正在运行iOS 4.2.1。令我感到意外的是,与许多全功能的iOS游戏相比,我们在我们的游戏中并没有做太多事情。我们已经考虑过使用纹理图集,但这将是很多工作。你认为值得尝试吗? – jowie 2012-04-27 14:43:34

+0

对我来说,你可以考虑不支持iPad 1:与iPad 2和新iPad相比,它的CPU/GPU非常糟糕! – MacTeo 2012-04-27 15:42:32

+0

但是你不能那样做,可以吗?我听说不能限制,除非你检查特定的硬件,例如前置摄像头...然后苹果可能不会允许,除非我们实际使用前置摄像头。 – jowie 2012-04-27 15:53:31

你不需要为了让你的应用程序工作而折腾iPad1的支持。您可以避免此问题的方法是解压缩纹理,然后将每个纹理写入文件。然后,内存映射每个文件并使用内存映射地址而不是正常的内存地址。 iOS设备可以通过这种方式映射文件中大约700兆数据,并且可以使用正常的opengl方式将内存发送到显卡。