客戶端熱更新框架之UI熱更框架設計(上)


什么是熱更新,為什么需要熱更新?
          熱更新是目前各大手游等眾多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)框架。   

熱更新框架運行過程:
        整體熱更框架的運行流程如下:
       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:  場景資源加載。

      

       最后由於篇幅所限,筆者先寫到這。下一篇本人會先就 "熱更新UI框架" 這個模塊,進行詳細講解,有感興趣小伙伴們,給我留言,謝謝!

 


免責聲明!

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



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