首先肯定是判斷游戲在冷啟動過程中是在做什么事情消耗了時間,然后針對性地優(yōu)化。還有就是定義好冷啟動的界限,從點(diǎn)擊游戲到Unity的閃屏出現(xiàn)這段時間通常定義為冷啟動的時間,但是我們項(xiàng)目后來發(fā)現(xiàn)在做啟動的優(yōu)化的時候還有很長時間花費(fèi)在游戲啟動之后的一些資源初始化方面。
Unity 冷啟動簡介
Unity3D游戲如何加快冷啟動時間
如何改進(jìn)Unity3d手游啟動速度?
Unity啟動耗時優(yōu)化
我在優(yōu)化啟動時間的過程中沒有使用什么特別多的工具,主要是基于mlogcat.exe查看設(shè)備上輸出信息的log,結(jié)合自己加入的一些log來做問題的排查。純粹的冷啟動時間過長,會和Resources目錄下的資源有關(guān)系,越多越慢。我們是以AssetBundle的方式為主,所以這塊注意了下,清理了一些插件引入的確定不需要的資源(直接看打包好的apk里的內(nèi)容來排查)。另外搜索下還有一些文章說相關(guān)問題,可以關(guān)注下,這里不贅述。Unity 冷啟動簡介Unity3D游戲如何加快冷啟動時間如何改進(jìn)Unity3d手游啟動速度?Unity啟動耗時優(yōu)化說一下我們遇到的游戲啟動時間過長時解決過的幾個問題。我們定義啟動時間是從點(diǎn)擊app圖標(biāo)到進(jìn)入游戲Patch界面(即游戲邏輯接管)這段時間。
1)Shader編譯時長。如果只有游戲安裝之后第一次啟動時間過長,一個很大的可能是shader編譯,之后游戲啟動因?yàn)橛辛薈ache所以會快很多。這種情況的話建議查看下Always Include的Shader內(nèi)容和變體,使用shadervariantcollection等方案替代。
2)Tolua綁定和Lua資源加載。這種是每次游戲啟動都會有的,ToLua接口綁定需要一定的時間,我們在確保前期不會使用Lua的情況下采用多線程的方式進(jìn)行綁定和加載,保證主線程不會卡住。
3)注意設(shè)置Web請求的超時時長。我們在游戲啟動的時候做了一些hook的事情,會有Web請求,后來我們遇到一個情況是在很多機(jī)器上會黑屏等待30s甚至60s這樣的時長,后來發(fā)現(xiàn)是因?yàn)檫@個Web請求沒有設(shè)置超時時間,于是使用了機(jī)器默認(rèn)的超時時間,在不同設(shè)備上不同,比如紅米2A上會有接近1分鐘的超時限制。這個很坑,只是因?yàn)槟莻€非必須的Web服務(wù)沒有正確開啟,導(dǎo)致排查了很長時間。
Native層增加界面,減少黑屏等待,提升玩家體驗(yàn)。這個并不能真正解決問題,只是一種緩解手段,等到優(yōu)化做到位了,其實(shí)也就不需要了。
說的內(nèi)容大都是啟動時間而非冷啟動,供題主參考。建議題主多看看Unity進(jìn)程的輸出log,可能會有意外發(fā)現(xiàn),通常情況下,不使用Resources的方式的話,在沒Bug的情況下冷啟動時間應(yīng)該不會很長,我們因?yàn)闆]怎么用這種方式,所以不是很清楚。這個鏈接可以參考下:http://www.itdecent.cn/p/4366da6dd4a1