Unity3D 冷啟動簡介

相比于Android或者iOS原生App,Unity3D引擎開發(fā)的游戲在冷啟動時間上確實比較長。我在三星SM-N9008手機上的測試結果是一個不算大的項目,如果使用Mono后端編譯,則需要10秒左右的冷啟動時間,而如果使用 IL2CPP 后端編譯,則冷啟動時間為7秒左右。

IL2CPP相比于Mono確實能夠加快冷啟動時間,這是可以預期的。因為在Mono編譯的情況下,每個 .cs 文件都是一個 TextAsset 文件,而所有的 .cs 文件都需要在冷啟動時候全部加載到內(nèi)存中,這些碎片化的文件加載操作都會占用冷啟動時間。關于冷啟動需要加載哪些文件的分析,可以參考Unity3D游戲在啟動時都默認加載哪些資源。而IL2CPP會把所有的C#代碼編譯成C 代碼,然后再進行編譯、鏈接等操作,這樣就減少了C#、DLL所帶來的開銷。

在項目中我們應該怎樣加快游戲的冷啟動速度呢?經(jīng)過調(diào)研,我總結出以下幾個優(yōu)化的要點:

1.項目中添加一個Loading場景,這個場景會是游戲啟動的第一個場景。

2.在Loading場景中盡量少的依賴,盡量少的紋理依賴、AssetBundle依賴、代碼依賴,總之,這個Loading場景一定要盡量少的依賴,這個場景一定要盡量簡單,這樣才能保證盡快的加載速度。

3.在游戲中盡量少的使用Resources方式管理資源,Resources目錄下面的所有資源會在ResourceManager中記錄下來,而ResourceManager就是一個文件,通常是一個YAML格式的文本文件。而這個文件是會在冷啟動時加載的。所以Resources目錄下面的有越多的資源,那么這個ResourceManager就會越大,加載時間也會越長。

4.使用Resources方式管理資源還有一個壞處,就是所有的資源都是統(tǒng)一管理的,這樣的資源的管理粒度沒辦法控制。建議使用AssetBundle的方式管理,這樣可以使用多個AssetBundle來管理資源。把在Loading場景中需要的最小資源集放在一個AssetBundle中,這樣在冷啟動時啟動Loading場景時,只需要加載一個AssetBundle即可。選擇合適的粒度管理AssetBundle,可以在合適的時候加載某一個AssetBundle,不使用時就可以卸載某一個AssetBundle。

5.在Loading場景中,添加一個進度條,然后 同步加載 進入主場景所需要的AssetBundle,這樣用戶就不會感到等待時間太煩躁了。同步加載要比異步加載時間更短。

6.紋理資源在游戲中一般是最大的資源,選擇合適的壓縮格式進行壓縮,既可以減少內(nèi)存占用,又能夠加快資源的加載速度。壓縮格式的選擇要從顯示效果和壓縮率上進行權衡。一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情況下,可能還可以考慮使用Alpha通道分離技術進行壓縮處理。

7.代碼文件可以編譯成 .dll 文件, 減少大量TextAsset文件導致的碎片化加載時間。

8.強烈建議使用IL2CPP后端,如果使用IL2CPP,則可以忽略第7條。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 閱讀時間:15分鐘左右 概要 在優(yōu)化Unity游戲時,我們一般從四個方面:CPU、GPU、內(nèi)存、工程配置等入手,它...
    JervieQin閱讀 1,876評論 0 8
  • 背景: 隨著游戲包越來越大,app冷啟動的耗時問題也越來越嚴重,下面將利用一些工具分析一下android啟動耗時問...
    阿飛咯閱讀 17,221評論 0 10
  • 彩排完,天已黑
    劉凱書法閱讀 4,497評論 1 3
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,895評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,171評論 0 4

友情鏈接更多精彩內(nèi)容