我有一个使用 Unity 游戏引擎和自写库来访问 Apple 的 Core Motion 框架的 iPhone 游戏。性能在 iPhone 5 上非常出色,过去在 iPhone 4 上也相当不错。
今天在 iPhone 4 (iOS 6.1.3) 上运行我的应用程序,一段时间后会出现帧速率持续下降(5-10 分钟后明显)。大约 20-30 分钟后,游戏几乎无法玩,并且似乎以慢动作运行。
奇怪的是:特别是当设备静止在桌子上时,效果会发生。当我移动设备时,帧率明显上升,但在没有移动时再次下降。我发现用 C#(Unity 游戏引擎)编写的游戏代码不是罪魁祸首,而是使用 Core Motion 处理运动控制的 Obj-C 部分。
我认为问题开始于我从 iOS 5.1.x 更新到 iOS 6.1.3 的时间,但我不确定。很难确定问题开始的确切时间,因为我在精美的 iPhone 5 上进行了所有更长的测试,而在 iPhone 4 上进行了快速测试(好的,吸取了教训 ;-)。
我使用“旧式”拉取方法来获取CMDeviceMotion
实例,即没有块处理程序的startDeviceMotionUpdates 。拉取代码在一个单独的线程中运行,结果证明这是最高效的方式——嗯,在过去。
Unity 内置的 iOS 分析器(控制台)并没有显示出显着的内存消耗,但我认为在统计中没有考虑原生代码插件。据我所知,Xcode 分析器也没有显示任何泄漏。只是大量的内存分配和释放,这让我有点惊讶(我认为在轮询时在内部回收 CMDeviceMotion 实例可能会更快,但谁在乎)。
问题:iOS 6 上这个星座有什么已知问题吗?我的意思是,拉动,在单独的线程中运行,60 Hz,结合 Unity 游戏引擎 + Open GL ES 2,......