【Unity3D遊戲開發】性能優化之如何將包大小減少到極致(三六)

Unity3D之如何將包大小減少到極致,圖片是遊戲app裏最最佔空間的資源,所以請各位還沒有理解u3d對圖片文件存儲方式理解的請看《unity3d-texture圖片空間和內存佔用分析》。因爲u3d對資源的壓縮並不闡述的十分詳細,所以很多項目在遇到包大小瓶頸時非常頭疼。我也不是神仙,也同樣痛苦過,但經歷幾個項目的折騰,最終能梳理出一套能將u3d包大小減少到合理範圍的方法。

首先來展示下,官方如何說的:

http://docs.unity3d.com/Manual/ReducingFilesize.html 官方手冊)

1.替換jpg,使用psd,減少重複資源

2.剔除不必要的資源

3.打包時查看log紀錄,由此判斷需要減少的文件類型

4.優化,壓縮圖片,減少圖片大小

5.優化,壓縮網格和動畫,減少文件大小

6.剔除system.dll和system.xml.dll ,儘量不要依賴他們,或用其他組件來代替。

這些官方解釋對我們幫助甚少。我把包分成三段:1.首包(裏面包含了最最必要的資源)。2.首次進入包加載(加載遊戲運行必要的資源)。3.遊戲運行中資源加載(按每個遊戲不同各自定義,以場景和單位個體爲主要,在畫面進入時加載資源,加載結束後再運行並顯示)。

關於u3d的AssetBundle資源加載與打包封裝,請查看《unity3d之assetbundle資源加載封裝》這篇文章。

下面說說關於動態資源加載和資源導入內存的所有方式,這是優化資源的必要條件,因爲只有你知道了所有的加載和導入途徑你才能對項目資源優化進行全面的分析。知道了有哪幾條路你才能選擇一條最好的。如下:

利用動態資源加載有幾種方式:

1.將資源放入assetstream文件夾隨打包一起打入文件。

2.將部分資源放在服務器,遊戲前或遊戲中進行加載,並保存到本地。

3.將資源壓縮成多個zip文件放在服務器,客戶端下載這些zip文件合成一個zip文件進行解壓。

其實www.LoadFromCacheOrDownload加載機制也可以算一種,但好像u3d4.5.2開始已經摒棄這個接口,不再開放,因爲它也開始意識到這個接口容易給人造成誤解,而且不好用。

資源導入內存的方式有幾種:

1.從Resources文件夾中導入。這是阻塞加載最常見的方式,接口Resources.Load();

2.從某地址加載資源www。這是異步加載最常見方式,接口new www(path);

3.直接從文件或者bytes[]生成AssetBundl,接口:AssetBundle.CreateFromFile阻塞方法, AssetBundle.CreateFromMemory異步方法,AssetBundle.CreateFromMemoryImmediate阻塞方法

4.使用File類加載文件,File.ReadAllBytes,File.ReadAllText。

有了資源加載和內存導入後,還需要配備資源驗證方式,這樣整個項目動態加載體制才完善。資源版本更新方式可以使用json格式並以文件形式查看。驗證方式的理解,還需要大家使用在項目裏才能體會到真正的用途,才能將原理牢記於心。

驗證資源版本有幾種:

1.資源整體驗證。步驟:1.客戶端向服務器發送資源版本。2.服務器匹配最近版本號,若版本號不同,比較兩個版本號之間的內容差異,發送差異資源地址。3.客戶端刪除差異內容中需要刪除的文件資源,加載需要下載的文件資源並保存文件。最後保存版本號。

2.單個資源文件的時間戳驗證。步驟:1.客戶端向服務器發送資源版本號。2.服務器匹配最新版本號,如果不同就重新發送一份資源版本列表,裏面包含了資源文件的時間戳。3.保存版本列表。4.在客戶端需要加載該資源時比較時間戳是否一致,如果不一樣或這不存在就加載資源文件並保存固定時間戳。

3.單個資源文件md5驗證。步驟:1.客戶端向服務器發送資源版本號。2.服務器匹配最新版本號,如果不同重新發送一分資源版本列表,裏面包含了資源文件的md5碼。3.客戶端比較新舊資源版本列表中的,刪除需要刪除的和更新的資源。4.在客戶端需要加載該資源時查看文件是否存在,如果存在就說明資源是最新的。如果不存在則需要實時下載。

發佈了106 篇原創文章 · 獲贊 24 · 訪問量 132萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章