Unity資源打包學習筆記(二)、如何實現高效的unity AssetBundle熱更新

轉載請標明出處:http://www.cnblogs.com/zblade/服務器

0x01 目的併發

在實際的遊戲開發中,對於遊戲都須要進行打補丁的操做,畢竟,測試是有限的,而bug是沒法預估的。那麼在手遊中,unity對於打補丁的方式就是提供熱更新。本文主要針對assetbundle的熱更新流程進行設計探討,拋磚引玉,但願有更優的解決方案。post

0x02 基本流程測試

在實際的遊戲開發中,經常會被assetbundle的熱更新折騰的沒法入眠,每次在進行熱更新的時候都須要反覆測試,由於這牽涉着實際的上線遊戲運行。優化

爲了提升熱更新的魯棒性,優秀的作法,就是將熱更新放在平時的開發中,伴隨着開發中進行天天的熱更新校驗,讓開發人員,策劃人員,測試人員,甚至美術人員,都參與到實際的熱更新中,這樣能夠在平時就測試出可能出現的Bug,從而避免在遊戲須要熱更新時候的緊急測試。ui

爲了實現即時開發即時熱更新的機制,咱們就須要設計好熱更新流程,明晰的設計方案,能夠指導實際的開發工做。對於流程設計,我主要分爲兩個部分進行分別探討:spa

一、如何快速打出assetbunle包命令行

要實現ab的熱更新,那麼unity打ab就是一個關鍵點。在之前的項目開發中,打ab包,是一個很頭疼的事情,特別是在資源量迭代增大以後,在後期的開發中,打ab包就是一個極爲費時的步驟。設計

分析其費時的緣由,是因爲在每次打ab包的時候,若是每次都是從新打ab包,那麼天然每次都是極爲費時的。Unity提供了一種增量打包的方式,具體能夠查看相關API,只要在固定的輸出路徑中進行增量打包,那麼每次打ab包的時候,只會對變化(增刪)和新增的ab進行從新打ab,因此只要分析好資源的依賴關係,而後設置好ab對應的name,剩下的增量打包操做只須要交給unity去執行便可。cdn

 

二、基於快速打ab包,快速在真機上驗證資源的更新

完成快速的ab打包後,只須要上傳到資源機/cdn上,在手機上便可實現實時的ab更新,那麼平常開發中若是對於美術資源在手機上的效果須要即刻測試,那麼只須要提交資源,而後執行打ab操做,上傳到資源機/cdn等上,而後更新到手機上快速驗證效果。

 

三、基於快速打ab包,實現小包的打包方式

在平常開發中,每次打遊戲包,都會帶來安裝包包體較大,特別是在遊戲後期,資源量大,對應的遊戲包包體極大,每次測試在安裝的時候,下載包體就很費時。而快速打ab包,能夠將這部分工做進行優化。每次打遊戲包的時候,能夠區分是否攜帶ab資源。若是不攜帶ab資源,那麼總體的遊戲包只須要進行代碼編譯和相關打包,而遊戲中使用的資源,能夠經過ab更新的方式,實時更新,每次有資源替換就更新ab資源,這樣測試天天開啓測試工做的時候,只須要少許更新,便可快速測試。

這樣的小包模式,適合版本功能測試的分支開發中,若是Lua文件也用熱更新的方式,那麼一個小包能夠較爲持續的測試對應功能,當功能測試完成後,便可合併到主分支。

既然有小包,那麼對應的就會有大包。這兒所謂的大包,就是將該版本的ab資源一塊兒打入在遊戲安裝包中。在平時的資源提交中,都會觸發對應的ab資源打包,因此當執行打打包的時候,耗費在ab中的實際不會很長,這樣能夠總體優化打安裝包的時間。

 

0x03 如何利用jenkins來執行平常資源打ab包

說完快速打ab的優勢後,說說怎麼利用jenkins來實現快速打ab包。

平常簡單的build工做,能夠分配一臺單獨的資源打包機執行打資源ab包便可。利用開源的jenkins,能夠較爲快速的實現打ab操做。

jenkins能夠配合Git/SVN實現相關的hook,在每次Git/SVN的服務器中,有push tag/post-commit操做的時候,均可以調用jenkins的API來執行相關的job。在相關job中調用unity的命令行來實現打ab操做。

若是存儲空間容許,能夠將工程切分爲不一樣平臺,利用Jenkins的pipeline實現併發打ab操做,實現高效的打ab包操做。

簡易的效果圖以下:

 

0x04 總體示意圖

綜上所述,能夠畫出總體示意圖,懶得畫了,就隨手拍一張手繪吧 (忽略個人靈魂畫法):D

相關文章
相關標籤/搜索