1. 程式人生 > >【Unity遊戲開發】AssetBundle雜記--AssetBundle的二三事

【Unity遊戲開發】AssetBundle雜記--AssetBundle的二三事

比較 streaming 指定 但是 chunk 加載 公司 prefab 方法

一、簡介

  馬三在公司大部分時間做的都是遊戲業務邏輯和編輯器工具等相關工作,因此對Unity AssetBundle這塊的知識點並不是很熟悉,自己也是有打算想了解並熟悉一下AssetBundle,掌握一下Unity資源管理方面的知識,因此有了這篇博客。

  我會在博客中整理出一些自己學習時收集到的一些比較好的AssetBundle學習資料,並且結合現在正在參與開發的商業項目隨時寫下一些自己的拙見。本篇博客權當是馬三自己的筆記和一些雜談,會不斷地隨時隨地的更新一些內容。

二、收集整理的一些AssetBundle資料

1.Unity AssetBundle5講系列

Unity5-ABSystem(一):AssetBundle原理

Unity5-ABSystem(二):AssetBundle導出

Unity5-ABSystem(三):AssetBundle加載

Unity5-ABSystem(四):AssetBundle依賴

Unity5-ABSystem(五):AssetBundle內存

2.慕容小匹夫系列

Unity3D 5.3 新版AssetBundle使用方案及策略

進擊的AssetBundles和它的工具們

3.何三思譯Unity AssetBundle官方文檔系列

【Unity3D技術文檔翻譯】第1.0篇 AssetBundles

【Unity3D技術文檔翻譯】第1.1篇 AssetBundle 工作流

【Unity3D技術文檔翻譯】第1.2篇 為打包 AssetBundles 準備資產

【Unity3D技術文檔翻譯】第1.3篇 創建 AssetBundles

【Unity3D技術文檔翻譯】第1.4篇 AssetBundle 依賴關系

【Unity3D技術文檔翻譯】第1.5篇 本地使用 AssetBundles

【Unity3D技術文檔翻譯】第1.6篇 使用 AssetBundle Manager

【Unity3D技術文檔翻譯】第1.7篇 AssetBundles 補丁更新

【Unity3D技術文檔翻譯】第1.8篇 AssetBundles 問題及解決方法

【Unity3D技術文檔翻譯】第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完結)

4.UWA講AssetBundle系列

你應該知道的AssetBundle管理機制

揭開AssetBundle廬山真面目(二)

5.雜

Unity5的AssetBundle系統在mmo中的使用經驗

三、AssetBundle踩坑與經驗集錦

  1、先說一個遇到的坑,當大量(幾百個)AssetBundle加載的時候(可能是WWW加載的時候,也可能是AssetBundle.LoadAsset的時候),Android手機上會閃退。看崩潰log是多線程文件訪問的時候崩潰了。解決方法是減少同時加載的AB數量(這個是純邏輯控制),使用AssetBundle.LoadFromFile接口。

  2、打包AssetBundle使用LZ4壓縮(BuildPipeline.BuildAssetBundles,第二個參數傳遞BuildAssetBundleOptions.ChunkBasedCompression),默認是LZMA壓縮的,具有最高的壓縮比。而替換為LZ4壓縮,壓縮比沒有LZMA高,但是加載速度大幅提高。加載AssetBundle使用AssetBundle.LoadFromFile(Async),在Unity4的時候,只能使用WWW的接口來加載AB,因為CreateFromFile不支持壓縮的AB。而Unity5的LoadFromFile是支持任意壓縮格式的AB的。所以沒有太大必要使用WWW了,而且這個接口像WWW.LoadFromCacheOrDownload接口一樣,加載不壓縮或者LZ4壓縮格式的AB的時候是不會有額外的內存開銷的。具體關於內存、加載速度的細節可以參考上面第三篇文章裏面的介紹。

3、資源規劃好一個獨立的資源工程。規劃好一系列的文件夾,在導入相應資源的時候自動通過AssetImporter設置好AB的名字。監測資源導入可以用AssetPostprocessor 。帶動畫的模型需要創建好prefab,而不帶動畫只是用於換裝的模型可以直接導出,不需要創建prefab,因為這些模型我們只是取它的mesh數據。如果有打包圖集,需要註意它和AB的匹配關系,舉例來說,如果三張圖片指定了同一個圖集,而又分別指定了不同的AB名,則三個AB裏面都包含了此圖集(三張圖片),這樣就會造成嚴重的資源浪費。

4、AssetBundle.LoadFromFile接口在Android平臺下也是可以直接訪問StreamingAssets文件夾裏面的內容的。5.4版本可以直接使用Application.streamingAssetsPath。而之前的版本需要使用 Application.dataPath + "!assets/" + filePath; 因為streamingAssetsPath帶了jar://,這個是給WWW用的URL路徑,而LoadFromFile接口需要的是實際路徑(不帶jar://也不帶file://)。註意 !assets/ 這個地方嘆號後面沒有/。網上搜索到的各種寫法都有,只有這個是正確的,註意此處細節。

四、項目工程地址

五、未完待續

【Unity遊戲開發】AssetBundle雜記--AssetBundle的二三事