天天看點

Unity開發遊戲啟動慢問題解決方案

一,項目背景

在手遊時代,消除遊戲成為休閑遊戲領域中的一個重要類型。《惡魔消除》是一款可以在手機上三消類益智遊戲。遊戲除了橫豎交換物體得到消除之外,還添加類似魔方的行,列滑動的互動方式,讓使用者有不一樣的互動體驗。遊戲有300+關卡,各種不同類型的過關玩法,以及多種道具供玩家使用。

開發環境:

- Unity2019.4.19

- JetBrains Rifer 2019.1.3

- Xcode 12.5.1

二,所遇到的挑戰

2.1 難在于發現問題

随着使用者的增加,得到越來越多的使用者回報:“遊戲打開慢”。

有上線經驗的程式,應該都知道上線遊戲能得到使用者回報的比例是很小的。使用者回報的兩個必要條件:

1. 喜歡你的遊戲(需要你的程式)

2. 程式存在不能忍受的問題

是以一旦有幾個使用者回報了同一個問題,我們一定要重視起來(别問我怎麼知道的)。

2.2 更難于定位問題

對于使用者回報的啟動慢?

程式員:啟動慢? 首次啟動慢? 冷啟動慢?

還是熱啟動慢啊? 什麼機型?

系統什麼版本?

這麼一大堆問題,肯定沒有辦法去問使用者啊。即便是問了也沒有結果。因為大部分使用者是不會回複的(能給回報已經很不易了),剩下的一部分估計要反問了:什麼是冷啟動?什麼是熱啟動?...

2.3 擷取到解決方案

​​友盟+U-APM

應用性能監控平台​​:(之前用過友盟+

的統計功能,就感覺非常好用。這次又是友盟幫助解決了大問題[手動點贊]。)

Unity開發遊戲啟動慢問題解決方案

由上圖可以看到​​U-APM​​為我們提供了”2.2”中程式原提出的所有問題的資訊統計,感覺真的不要太強大有沒有。

雖然有了這麼多的統計資訊,可是我手裡沒有那麼多測試機啊,總不能先接入SDK釋出一個版本,看來使用者資料來校驗問題是否修正吧。這種想法可真是太可怕了,光是啟動慢還好,要是閃退這種直接導緻程式崩潰的緻命問題,這麼幹無疑會傷一批使用者,不過好在​​U-APM還為我們提供了雲真機功能​​,并且還推出了免費體驗時長,真是貼心~

三,解決問題的步驟

3.1 接入U-AMP

接入流程如下:(每一步官方都有詳細文檔,這裡不再贅述。)

​​​官網位址:https://www.umeng.com/​​

Unity開發遊戲啟動慢問題解決方案

3.2 定位問題

通過接入U-AMP結合官方提供雲真機,多機型多次測試後。問題确定為冷啟動時間較長。幾經周折,查了很多啟動慢相關文章,解決方案基本歸結如下:

1.  Resources管理資源:

Resources目錄下面的所有資源會在ResourceManager中記錄下來,而ResourceManager就是一個檔案,通常是一個YAML格式的文本檔案。而這個檔案是會在冷啟動時加載的。是以Resources目錄下面的有越多的資源,那麼這個ResourceManager就會越大,加載時間也會越長。

建議:使用AssetBundle的方式管理,在現在官方也推出了可尋址系統Addressable AssetSystem

2.  Shader編譯時長:

如果隻有遊戲安裝之後第一次啟動時間過長,一個很大的可能是Shader編譯,之後遊戲啟動因為有了Cache,是以會快很多。這種情況的話建議檢視下Always Include的Shader内容和變體。

建議:使用shadervariantcollection等方案替代。

3.  紋理資源過大:

在遊戲中一般是最大的資源,選擇合适的壓縮格式進行壓縮,既可以減少記憶體占用,又能夠加快資源的加載速度。壓縮格式的選擇要從顯示效果和壓縮率上進行權衡。

建議:一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情況下,可能還可以考慮使用Alpha通道分離技術進行壓縮處理

3.3 解決問題

由于原工程打包慢,是以我建立了項目,模拟還原了3.2中:Resources管理資源和紋理資源過大問題:(建立工程,在Resource檔案夾中放了資源,在其他檔案夾下放了比較大的紋理)

打包測試結果如下

Unity開發遊戲啟動慢問題解決方案

經過減少Resource檔案夾資源,和對比較大的貼圖壓縮後。

打包測試結果

Unity開發遊戲啟動慢問題解決方案

經過對比可以看到啟動時間确實是減少了,證明方案可行,可以應用到實際項目。

四,項目總結

相比于Android或者IOS原生App,Unity3D引擎開發的遊戲在冷啟動時間上确實比較長。但是過長的啟動時間會導緻使用者不好的使用者體驗,甚至損失一批使用者。若沒有使用者回報,可能問題一直得不到解決,很可能成為收益少的一大因素。

是以,平時開發時注重資源管理,後續就不會有這種類似問題。另外測試資料量,以及低端機型使用者體驗都是有必要作為關鍵測試點的。

最後強烈建議​​​友盟+U-APM SDK

​​​。不管是統計工程和還是性能分析以及崩潰回報都可以幫助開發者及時快速定位解決問題,以免帶來更大的損失。