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


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

0x01 目的

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

0x02 基本流程

在實際的游戲開發中,常常會被assetbundle的熱更新折騰的無法入眠,每次在進行熱更新的時候都需要反復測試,因為這牽涉着實際的上線游戲運行。

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

為了實現即時開發即時熱更新的機制,我們就需要設計好熱更新流程,明晰的設計方案,可以指導實際的開發工作。對於流程設計,我主要分為兩個部分進行分別探討:

1、如何快速打出assetbunle包

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

分析其費時的原因,是由於在每次打ab包的時候,如果每次都是重新打ab包,那么自然每次都是極為費時的。Unity提供了一種增量打包的方式,具體可以查看相關API,只要在固定的輸出路徑中進行增量打包,那么每次打ab包的時候,只會對變化(增刪)和新增的ab進行重新打ab,所以只要分析好資源的依賴關系,然后設置好ab對應的name,剩下的增量打包操作只需要交給unity去執行即可。

 

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

完成快速的ab打包后,只需要上傳到資源機/cdn上,在手機上即可實現實時的ab更新,那么日常開發中如果對於美術資源在手機上的效果需要即刻測試,那么只需要提交資源,然后執行打ab操作,上傳到資源機/cdn等上,然后更新到手機上快速驗證效果。

 

3、基於快速打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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM