2013-08-26 24 views
0

我有一款iPhone遊戲使用Unity遊戲引擎和自行編寫的庫來訪問Apple的Core Motion框架。 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進行了快速測試(OK,經驗教訓;-)。

我使用'舊式'拉取方法來獲取CMDeviceMotion實例,即無塊處理程序的startDeviceMotionUpdates。拉代碼運行在一個單獨的線程中,這是最具表現力的方式 - 嗯,在過去。

Unity的內置iOS分析器(控制檯)沒有顯示大量的內存消耗,但我認爲在統計數據中沒有考慮本機代碼插件。據我所知,Xcode profiler也沒有顯示任何泄漏。只是大量的內存分配和釋放,這對我來說有點令人驚訝(我認爲在輪詢時內部回收CMDeviceMotion實例可能會更快,但是誰在乎)。


問題:是否有這個星座在iOS 6中的任何已知問題?我的意思是,拉,在一個單獨的線程,60赫茲,使用Unity遊戲引擎+的Open GL ES 2,合併運行...

回答

1

終於讓我找到了罪魁禍首:deviceMotionUpdateInterval
爲了更準確漂亮的間隔的變化經常是

根據部分Choosing a Motion Event Update Interval in Event Handling Guide for iOS更大的間隔延長了電池壽命。所以我實現了一些邏輯,當遊戲沒有激活時,將頻率減慢到2Hz,即遊戲結束,暫停,主菜單......當恢復遊戲時,頻率再次設置爲60Hz。

註釋掉改變頻率的代碼後,問題就消失了。所以我決定不再試圖通過這種方式節省電池消耗。

相關問題