AssetBundle工作流

資源打包

Unity5.x打包要方便很多类垫,不需要自己收集依賴。設(shè)置了AssetBundle Names的資源會依賴打包,Name相同的資源會打在一起仔掸;沒有設(shè)置AssetBundle Name的不會依賴打包,直接打進包內(nèi)医清,這部分資源有可能會出現(xiàn)冗余起暮,需要注意。

  • 規(guī)劃資源目錄
    不同類型的資源使用不同的子目錄会烙,比如:角色负懦,武器,場景柏腻,粒子纸厉,UI等。子目錄下繼續(xù)劃分:材質(zhì)五嫂,貼圖颗品,動畫,模型等目錄沃缘。所有資源可以放在Resources目錄下躯枢。

  • 規(guī)劃打包粒度
    粒度不能太小,以避免AssetBundle數(shù)量過多孩灯;粒度不能太大闺金,避免資源冗余和小改動需要更新較大的AssetBundle。

  • 設(shè)置AssetBundle Name

    • 根據(jù)不同資源的打包粒度峰档,設(shè)置其AssetBundle Name败匹。因為這里是以資源目錄為導向的,所以要提交規(guī)劃好資源目錄結(jié)構(gòu)讥巡。
    • 未設(shè)置Name的資源如果被依賴掀亩,則會直接打進包內(nèi)。
    • 未設(shè)置Name的資源如果不被任何資源依賴欢顷,比如預(yù)設(shè)槽棍,則不會被打包。
  • 執(zhí)行打包API

    1. 將AssetBundle文件保存在工程目錄中下的子文件夾中。比如工程目錄中的AssetBundle文件夾下炼七,這樣Unity就不會自動導入這部分資源了缆巧。

    2. AssetBundle目錄下劃分不同平臺的子目錄,存放不同平臺的資源豌拙。如:iOS陕悬,Android等。

    3. 更改默認的manifest文件與其AssetBundle文件名按傅。manifest默認名稱為當前目錄的名字捉超,為了方便加載,可以統(tǒng)一改為"manifest"唯绍,"manifest.manifest"拼岳。

  • 生成資源版本號

  • 生成文件列表FileList
    記錄所有AssetBundle文件相對于StreamingAssets目錄的路徑(全部小寫),對應(yīng)的CRC况芒。

  • 拷貝至StreamingAssets目錄
    當需要以AssetBundle模式運行游戲惜纸,或BuildPlayer時,需要將對應(yīng)平臺下的AssetBundle文件拷貝至StreamingAssets目錄牛柒。

  • 更新CDN
    將AssetBundle資源堪簿,F(xiàn)ileList,版本號上傳至CDN皮壁。不同版本資源存放在以版本號命名的目錄中;而不是刪除舊資源然后放在同一個目錄中哪审。這樣可以保證CDN中始終是最新的資源蛾魄,因為加參數(shù)的方式在某些CDN上會無效。

  • 排查資源冗余
    可以使用Unity開源插件"AssetBundle Browser Tool"來查看冗余的那部分資源湿滓。實際上它并不是分析已經(jīng)打好的AssetBundle滴须,而是分析當前設(shè)置的AssetBundle Name。

https://github.com/Unity-Technologies/AssetBundles-Browser

資源更新

  • 獲取最新版本號

  • 下載FileList
    由版本號可以算出對應(yīng)版本的資源更新地址叽奥,以及FileList文件扔水。

  • 對比FileList
    對比本地FileList與遠程FileList,計算哪些文件需要更新(對比CRC)朝氓,哪些文件需要刪除魔市。

  • 下載AssetBundle
    使用WebRequest接口下載,將AssetBundle二進制數(shù)據(jù)寫入Application.persistentDataPath目錄下赵哲。同時校驗CRC待德,看是不是下載數(shù)據(jù)有誤。

  • 重新下載CRC較驗失敗的資源
    下載完成后枫夺,需要再次校驗将宪。

AssetBundle加載

經(jīng)過前一階段的資源更新,這一步資源完全從本地加載。從AB中加載Asset時较坛,必須保證所有依賴的AB都已經(jīng)加載印蔗。

  • 獲取依賴AssetBundle
    通過AssetBundleManifest對象,可以獲取到依賴信息(已包括遞歸依賴)丑勤。

  • 將資源存入待加載隊列
    將待加載AssetBundle與其依賴存入待加載隊列喻鳄。

  • 執(zhí)行加載
    從待加載隊列中取出待加載項,可以設(shè)置最大加載數(shù)确封,同一時間最多只能有N個資源同時加載除呵。異步加載接口:LoadFromFileAsync

  • 緩存AssetBundle
    將加載完成的AB緩存在字典中,下次還有加載請求爪喘,直接返回颜曾。Unity中同一個AB只能加載一次,否則會報錯秉剑。

  • 加載/緩存Asset
    當所有依賴AB加載完后泛豪,再從AB中加載Asset≌炫簦看看緩存的Asset诡曙,沒有再從AssetBundle中加載。

AssetBundle清理

  • 加載完Asset后略水,卸載AB
    調(diào)用AB.Unload(false)卸載AB价卤,減少AB的內(nèi)存占用。此時AB與相關(guān)的Asset斷開鏈接渊涝。

  • 再次LoadAsset
    當需要再次從卸載掉的AB中加載Asset時慎璧,因為已經(jīng)緩存了Asset了,所以這可以直接返回跨释,不需要重新加載AB胸私;如果沒有緩存Asset,則需要再次加載AB鳖谈。

  • ?退出場景

    1. Destroy Object

    2. 代碼中清除Asset引用

    3. AB.Unload(true)

    4. 清除AB緩存

    5. 清除Asset緩存

    6. Resources.UnloadUnusedAssets()

補充

  • 記錄AssetBundle引用
    緩存的AB需要記錄被引用數(shù)岁疼,原因是當需要卸載一個AB,也需要卸載其依賴的AB缆娃。但如果被依賴的AB也被其它資源依賴捷绒,如果直接卸載,會導致其它資源引用丟失龄恋。只有當引用數(shù)為1(即只被自己引用)才可以卸載疙驾。

  • 待加載資源重復(fù)請求
    將要加載的AB可能已經(jīng)在加載隊列中(被不同資源共同依賴),所以不必重復(fù)加入隊列中郭毕,只需要添加加載項的回調(diào)即可它碎。否則會出現(xiàn)同一個AB被加載多次(Unity也會報錯提示)。

  • 加載失敗的處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扳肛,隨后出現(xiàn)的幾起案子傻挂,更是在濱河造成了極大的恐慌,老刑警劉巖挖息,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金拒,死亡現(xiàn)場離奇詭異,居然都是意外死亡套腹,警方通過查閱死者的電腦和手機绪抛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來电禀,“玉大人幢码,你說我怎么就攤上這事〖夥桑” “怎么了症副?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長政基。 經(jīng)常有香客問我贞铣,道長,這世上最難降的妖魔是什么沮明? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任辕坝,我火速辦了婚禮,結(jié)果婚禮上珊擂,老公的妹妹穿的比我還像新娘圣勒。我一直安慰自己,他們只是感情好摧扇,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挚歧,像睡著了一般扛稽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滑负,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天在张,我揣著相機與錄音,去河邊找鬼矮慕。 笑死帮匾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的痴鳄。 我是一名探鬼主播瘟斜,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了螺句?” 一聲冷哼從身側(cè)響起虽惭,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛇尚,沒想到半個月后芽唇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡取劫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年匆笤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱邪。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡炮捧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虾标,到底是詐尸還是另有隱情寓盗,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布璧函,位于F島的核電站傀蚌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蘸吓。R本人自食惡果不足惜善炫,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望库继。 院中可真熱鬧箩艺,春花似錦、人聲如沸宪萄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拜英。三九已至静汤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間居凶,已是汗流浹背虫给。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侠碧,地道東北人抹估。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像弄兜,于是被迫代替她去往敵國和親药蜻。 傳聞我的和親對象是個殘疾皇子瓷式,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容