Unity Android 5.6版本Resources.Load效率的問題

0x00 前言

相信很多使用Unity的小夥伴都據說過,甚至也親身經歷過在Unity5.6最初的幾個版本中使用Resources.Load方法加載資源變~~慢的問題。
這個問題的確是存在的,好比這個issue中提到的:
android-performance-regression-when-loading-a-prefab-with-a-lot-of-child-objects-using-resources-dot-loadhtml

因此爲了驗證問題並思考是否有解決方案,我也實現了相似這個issue中提到的測試場景,而且分別在Unity5.6.1f1版本和Unity5.6.4p1版本上進行了測試對比,至於爲什麼選擇這2個版本下文再說。android

屏幕快照 2018-02-04 上午9.58.33.png

這個場景比較簡單,主要是在Resources文件夾下建立了一個有不少(650+)子節點的prefab,而且在運行時經過點擊按鈕調用Resources.Load進行資源加載。編程

而個人測試設備則是幾年前的MI Note Pro。工具

0x01 測試

測試場景和測試設備都準備就緒了,接下來咱們就直接在Unity5.6.1f1上進行安卓包的構建吧,同時直接連上profiler進行數據抓取。
屏幕快照 2018-02-04 上午8.53.10.png
不過這一測沒關係,果真能夠發現這個版本的Unity在調用Resources.Load加載資源的效率很低。大概要耗時1700ms!測試

等等,冷靜一下,回想一下既然是加載Resources文件夾內的資源,那麼Resources文件夾有什麼特色嗎?對,它會隨工程一同打包。也就是說在打包的過程當中它會通過aapt這個工具的處理啊。那麼aapt是什麼呢?看它的全稱——Android Asset Packaging Tool,安卓資源打包工具啊。那麼可否經過修改aapt的參數來改善加載Resources文件夾內的資源效率的問題呢?gradle

想到這裏,嚇得我立馬導出了一個gradle工程。
打開build.gradle文件查看一下,嗯這裏沒有設置aapt的相關參數。
屏幕快照 2018-02-04 上午10.18.42.pngui

因此我來手動加上對aapt的設置吧:3d

aaptOptions {
    noCompress '.unity3d', '.ress', '.resource', '.obb'
}

ok,此次咱們經過Android Studio來導出一個安卓包。而且連上設備進行測試。
no_compress.pngcode

結果讓人稍感欣慰,耗時已經從以前的1700ms來到了300ms。orm

因此,修改aapt的壓縮策略對Resources文件夾內的資源是有效果。

好了,咱們接下來使用另外一個Unity版本——5.6.4p1來進行測試。
此次不導出gradle工程,直接使用Unity來打包。

屏幕快照 2018-02-04 上午8.59.15.png

wow~測試的結果亮瞎雙眼。居然只須要50ms!(考慮到個人測試場景很兇殘,設備很簡陋,從1700+ms來到50ms仍是很大的躍升吧)。

這是爲何呢?

答案很簡單,由於咱們fix了這個問題啊。而這也是我選擇這個版本進行測試的緣由啊。
屏幕快照 2018-02-04 上午10.26.16.png

因此,若是還在對江湖傳聞中5.6版本的Resources.Load效率變態的低感到恐懼的話,就趕快升級Unity版本吧。固然,做爲最佳實踐之一,儘可能減小使用Resources也是不錯的選擇。

-EOF-
最後打個廣告,歡迎支持個人書《Unity 3D腳本編程》

歡迎你們關注個人公衆號慕容的遊戲編程:chenjd01

相關文章
相關標籤/搜索