什麼是熱更新,爲何須要熱更新?
熱更新是目前各大手遊等衆多App經常使用的更新方式。簡單來講就是在用戶經過App Store下載App以後,打開App時遇到的即時更新。對於手遊客戶端來講,受到蘋果審覈的約束, 一次審覈提交須要10~20天不等的等待時間。而這段時間開發進度依然會推動不少,一旦手游上線,第一個版本在玩家瘋狂行爲下,出點問題是必然的,因此」在線更新」 就成了屢見不鮮與必然。若是你要求必須總體從新下載完整下載包體,沒法熱更, 那麼10~20多天後,遊戲估計就沒啥人了。程序員
熱更新要解決的問題?
1: 更新頻繁而IOS審覈長,IOS沒法用DLL反射機制去作代碼更新。 若是無熱更新機制,則客戶端每次都須要玩家從新下載一次完整的安裝包,用戶體驗很差。
2: 解決發佈包的容量問題,一切均可以增量下載。服務器
熱更新的基本原理是什麼?
首先要清楚Unity的打包原理,也就是AssetBundle的打包機制,他會把prefab打包成.asset格式做爲傳輸的數據。經過校驗文件的MD5值來判斷是否須要更新,若是須要更新則下載差別文件。lua屬於解釋性文件因此能經過www直接下載到本地,經過C#與lua交互,把邏輯寫在lua裏,從而實現代碼熱更新。框架
爲何須要帶熱更新的框架?
在中大型商業項目中,基於以上熱更新的實際運營需求,國內外各大遊戲公司紛紛基於國內已知技術與成熟插件,由技術總監或者主程來牽頭研發本身公司的熱更新框架。函數
筆者開發的熱更新簡單框架介紹:
筆者基於自身技術儲備參考部分行業公司框架產品,設計了一套簡單熱更新客戶端框架,現介紹以下,但願以此起到拋磚引玉的做用,結交行業朋友。
熱更新框架整體構成:
客戶端熱更框架,核心主要設計爲如下幾個模塊:
A: 熱更新UI框架模塊。
B: lua框架(包含熱補丁模塊)。
lua框架由「純lua框架」與「C#映射lua」等技術構成。能夠實如今lua腳本中,定義unity的生命週期(eg: Start()、Update() 等),方便lua的編寫與功能擴展。
業務邏輯方面,固定業務不須要頻繁修改的功能,筆者仍是堅持用C#完成。 有頻繁更新需求的則用基於lua框架來編寫。基於本套lua框架,其比純lua編寫效率高不少。
C: 服務器端熱更新流程模塊。
D: 基礎支持插件與框架: xlua插件與AB(AssetBundle)框架。 lua
熱更新框架運行過程:
總體熱更框架的運行流程以下:
1: 首先熱更新流程模塊啓動。 玩家能夠從客戶端遊戲中看到PC或移動端(手機、Ipad等)與服務器的更新過程。
2: 熱更新的UI框架啓動。
3: lua框架啓動(與第2部分從宏觀上能夠並行運行)。
3.1> 檢查本項目中哪些C#腳本須要進行Bug動態更新。
3.2> 初始化lua框架與C#創建生命週期映射關係,進一步方便程序員在lua中使用unity提供的系統函數(例如:Start()、Update()等) 。
3.3> lua框架啓動完畢後,通知框架外部能夠開始加載項目lua文件,且運行期解釋執行。
4: 場景資源加載。spa
最後因爲篇幅所限,筆者先寫到這。下一篇本人會先就 "熱更新UI框架" 這個模塊,進行詳細講解,有感興趣小夥伴們,給我留言,謝謝!
插件