Unity手機(jī)游戲發(fā)熱發(fā)燙優(yōu)化指南與技巧
Unity手機(jī)游戲發(fā)熱發(fā)燙優(yōu)化指南與技巧
?
很多小伙伴做完游戲后,發(fā)布到Android,運行,游戲很流暢,也不卡頓,但是跑一會游戲,手機(jī)就發(fā)熱,發(fā)燙。客戶提出需求,能否讓它不發(fā)燙? 本文從以下3方面來分析手機(jī)發(fā)燙的問題,給大家提供一個解決此類問題的通用思路:
(1) 手機(jī)發(fā)燙是如何引起的?為什么要解決發(fā)燙問題?
(2) 如何定位手機(jī)發(fā)燙的問題?
(3) 針對性常用優(yōu)化手段與策略?

1手機(jī)發(fā)燙是如何引起的?為什么要解決發(fā)燙問題?
?
手機(jī)可以理解為是一臺小型的電腦, 里面運行了很多app。CPU處理完數(shù)據(jù)和事件后,如果沒有任務(wù)要處理了,就會休眠下去, CPU占用率也就會下降。休眠下去了,CPU不工作或工作在低功耗模式下了,消耗的電流就沒有那么大了。手機(jī)電路也會有電阻,電阻+電流就會轉(zhuǎn)化為熱能(熱能=I*R^2),熱能會通過手機(jī)的散熱導(dǎo)熱系統(tǒng)從外殼散去。長時間CPU的工作,就會導(dǎo)致長時間的高負(fù)荷電流,從而導(dǎo)致產(chǎn)生大量的熱能,如果熱能的產(chǎn)生速率大于熱能散發(fā)的速率,手機(jī)表面溫度就會升高,也就是我們說的發(fā)燙。
?
接下來說一個”低溫燙傷”的概念,長時間握住一個高于人體體溫的低熱物體,會容易形成低溫燙傷。一般低溫燙傷容易發(fā)生的溫度在42~51度?;旧?0,42左右就是一個臨界點,最好我們的長時間游戲的手機(jī)溫度要低于42。如果玩家長時間握住一個發(fā)燙的手機(jī)玩游戲,有可能導(dǎo)致玩家低溫燙傷,玩家可以通過法律手段來告游戲公司索取賠償。所以游戲公司要解決長時間游戲手機(jī)發(fā)燙的問題,避免玩家出現(xiàn)低溫燙傷。
?
“手機(jī)發(fā)燙”的本質(zhì)是CPU”很努力不休息”的工作才能保證游戲app的流暢運行,達(dá)到額定的幀率。而這個過程中產(chǎn)生熱量的速度大于散去熱量的速度。所以手機(jī)發(fā)燙的本質(zhì)還是CPU處理的事情較多,本質(zhì)還是要提升程序的性能,讓程序能更快的完成從而讓CPU有機(jī)會休眠或低功耗運行,從而讓手機(jī)不發(fā)燙,所以解決手機(jī)發(fā)燙的本質(zhì)問題還是優(yōu)化提升手機(jī)游戲app的代碼性能。
?

2 如何定位手機(jī)發(fā)燙的問題
?
經(jīng)過上面的分析,雖然游戲不卡,但是CPU長時間滿負(fù)荷的工作導(dǎo)致手機(jī)發(fā)燙,問題本質(zhì)還是性能優(yōu)化問題。所以本質(zhì)還是性能優(yōu)化的問題。定位手機(jī)發(fā)燙問題和定位性能問題大體思路與處理方式一樣的。接下來我給大家分析幾個常用的定位問題的方式和方法。
(1) 真機(jī)運行游戲進(jìn)程,查看游戲進(jìn)程的CPU占用率。當(dāng)遇到手機(jī)發(fā)燙的問題,我們一定要先看以下真機(jī)的CPU占用率,一般CPU總占用率肯定超過>80%以上才會有明顯的手機(jī)發(fā)燙現(xiàn)象。如果手機(jī)的總CPU占用率>80%, 而游戲進(jìn)程的CPU占用率比較低,其它別的進(jìn)程的CPU占用率比較高,可以具體分析以下,可能是別的app程序?qū)е碌模湍愕挠螒騛pp并沒有直接的關(guān)系。
(2) 手機(jī)游戲開發(fā)的時候往往會根據(jù)游戲的”視覺品質(zhì)”來進(jìn)行配置,分為最高等的畫質(zhì)與特效效果,中等畫質(zhì)與特效效果,低端畫質(zhì)與特效效果。我們首先要將用戶的機(jī)器進(jìn)行分類,分成高中低三個檔次,每個檔次的機(jī)型我們適配匹配好對應(yīng)的效果和特效。比如,高端機(jī)上跑高質(zhì)量,中端機(jī)跑中質(zhì)量,低端機(jī)跑低質(zhì)量。當(dāng)我們接收到用戶反饋的手機(jī)發(fā)燙的時候,首先要根據(jù)手機(jī)來判斷屬于哪一檔,來進(jìn)行處理。比如低檔機(jī)跑高質(zhì)量的畫質(zhì)肯定會產(chǎn)生卡頓與發(fā)燙,這個時候我們要把對應(yīng)的畫面質(zhì)量與對應(yīng)的性能做到匹配,做到每個檔次的機(jī)器在對等的畫質(zhì)上能做到不發(fā)熱。不要出現(xiàn)機(jī)器與畫質(zhì)不匹配與對等的情況。如果出現(xiàn)發(fā)燙,我們要統(tǒng)計出來是那個檔次畫面的哪種機(jī)型。比如中畫面質(zhì)量在中檔手機(jī)上發(fā)燙。有時候我們一個檔次的畫面來適配全部的高中低端機(jī),那么這個時候可以考慮將畫面參數(shù)進(jìn)行調(diào)節(jié)來適配。
(3) 如果同一個檔次畫面質(zhì)量在同一檔的機(jī)型上發(fā)熱,那么就是性能優(yōu)化的問題了。我們能做的就是提升程序的性能,讓CPU有更多的休眠時間,從而解決發(fā)熱。做性能優(yōu)化定位問題的時候我們要確定好是哪個部分占用的CPU+GPU資源導(dǎo)致發(fā)熱。一個一個模塊的排查: 渲染模塊,物理引擎模塊,邏輯算法模塊,其它,排查的時候,我們一般會一個一個的內(nèi)容重建,比如,排查渲染模塊,我們可以只做渲染,做同等規(guī)模的游戲地圖與渲染單元,查看運行結(jié)果,分析CPU占用率,看是否引起發(fā)燙。物理引擎模塊可以通過增加和減少物理計算單元來定位是否為物理引擎的問題。隔離掉邏輯算法代碼,看CPU占用率是否有改善。如此根據(jù)自己的游戲邏輯逐步定位性能熱點。
(4) 在游戲開發(fā)項目中,越早進(jìn)行機(jī)器的性能測試,是否發(fā)熱等指標(biāo),能幫助我們快速的定位是加入了哪些功能導(dǎo)致了機(jī)器發(fā)熱,同時測試機(jī)器最好都準(zhǔn)備幾個有代表性高中低端手機(jī)。一般我們做項目的時候,每個禮拜都會完整的真機(jī)測試有代表性的機(jī)器。
?
(5) 超規(guī)模的資源占用,導(dǎo)致OS操作系統(tǒng)的系統(tǒng)進(jìn)程CPU占用率飆升。比如系統(tǒng)的內(nèi)存時1G,你游戲的內(nèi)存占用了2G,這樣可能會導(dǎo)致操作系統(tǒng)不斷的與磁盤swap進(jìn)行數(shù)據(jù)交換釋放物理內(nèi)存來滿足內(nèi)存訪問,從而導(dǎo)致系統(tǒng)負(fù)擔(dān)過重,系統(tǒng)進(jìn)程服務(wù)的CPU占用率飆升,導(dǎo)致手機(jī)發(fā)燙。
?
3 針對性常用優(yōu)化手段與策略?
接下來給大家列舉一些針對性的優(yōu)化方向供大家參考和指導(dǎo),每一項優(yōu)化都有很多資料,具體的操作大家可以查找相關(guān)的資料,或者查閱我們往期相關(guān)的優(yōu)化技巧。
(1) 做好高中低端機(jī)型的適配, 高端手機(jī)上高端效果,低端手機(jī)上低端效果,比如高端手機(jī)正常,低端手機(jī)發(fā)燙,可以針對低端機(jī)考慮關(guān)閉光照計算,關(guān)閉陰影計算,切換一些更簡單的shader, 關(guān)閉一些特效。 指定一些規(guī)則,然后游戲運行后自動判定分類手機(jī)的類型,來開關(guān)相關(guān)的參數(shù)。
(2) 調(diào)整以下目標(biāo)運行時候的最高FPS, 默認(rèn)情況下游戲引擎控制FPS在60左右,如果我們中低端機(jī)所有的優(yōu)化已經(jīng)搞完了,雖然畫面流暢,但是手機(jī)還是發(fā)燙,就可以看下游戲運行中實際的FPS,如果游戲的實際FPS 超過了一個流暢運行的最低限制(一般是30FPS),可以考慮根據(jù)機(jī)型適配游戲的最高FPS為30,這樣導(dǎo)致的結(jié)果就是CPU拼命的工作讓實際幀率維持在60FPS,你減少最高幀率到30FPS,這樣CPU幀率到了30就可以休眠一點時間,從而維持流暢的情況下減少發(fā)熱。
(3) 渲染常用的優(yōu)化手段: 優(yōu)化渲染規(guī)模,使用增強(qiáng)細(xì)節(jié)的手段來代替模型面數(shù),提升shader性能。空間換時間來提前預(yù)制烘培,合并drawcall, 減少set pass call,優(yōu)化動畫組件將頂點動畫烘培到紋理中。等等。
(4) 物理引擎的常用優(yōu)化手段: 修改物理引擎迭代計算的參數(shù),降低剛體迭代的數(shù)目,使用更高效的方式替代物理引擎。等等。
(5) 優(yōu)化數(shù)據(jù)結(jié)構(gòu)內(nèi)存占用與算法: 緩存池減少節(jié)點反復(fù)大規(guī)模的刪除與創(chuàng)建,優(yōu)化算法,降低算法復(fù)雜度,空間換時間(預(yù)先計算好結(jié)果存儲起來,運行時查表即可),時間換空間,多線程優(yōu)化等。可以把部分的計算放到GPU中。等等。
?
定位好問題,認(rèn)真分析后針對性的來解決對應(yīng)的點就可以了。我們大部分的同學(xué)不會做性能調(diào)優(yōu)主要是問題定位沒有思路,定位不準(zhǔn)確,技術(shù)手段不熟練,從而導(dǎo)致了找不到問題,找到了問題不知道下什么手段。關(guān)注我們可以獲得更多性能調(diào)優(yōu)的文章與課程。
附:視頻教程
https://www.bycwedu.com/promotion_channels/2146264125??