上一篇筆者介紹了關於什麼是熱更新,爲何須要熱更新的技術文章。本篇就專門針對UI框架的熱更新功能實現部分展開討論,討論的重點是熱更新如何與UI框架進行結合?
如今筆者把設計「UI熱更新框架」的總體設計與構建過程表述以下,最後附帶源碼工程的下載連接,供廣大學員參考研究。若是你們有什麼不明白的地方,歡迎你們在評論區進行討論。
1:首先基於筆者之前設計的SUIFW 框架,作進一步功能完善。
完善UI框架對於複雜窗體的直接轉向功能。爲了小夥伴們可以更好的理解本技術,文章末尾特提供了下載連接供你們參考。
2:通過重構完善後UI框架與AB框架(即:AssetBundle 框架,本框架文章末尾提供×××連接) 的初步資源、腳本整合處理。
2.1> 創建一個全新的項目名稱例如:UIPlusABFramework。
2.2> 項目中增長存放須要打包資源的目錄。 例如「AB_Resurces」目錄。
2.3> Resources目錄原來的資源文件,除了配置文件外,所有拷貝到AB_Resources 目錄下。使用AB框架,對資源進行打包處理,加載到StreamingAssets 目錄下。
3:原始UI框架核心類(UIMangager.cs)的改動。
3.1> 把原UI核心類底層加載機制 Resources.Load() 的單機職能,改成以AB框架爲核心的AB包的調用加載機制。
具體說明:
ResourcesMgr.GetInstance().LoadAsset(strUIFormPaths, false);
替換爲
json
AssetBundleMgr.GetInstance().LoadAssetBundlePack(xx,xx,xx,LoadAllABComplete){}
private void LoadAllABComplete(string abName){}
3.2> 本來」Resources」 類須要的UI窗體路徑的(基於Json配置文件的)參數, 改成了以AB框架中「場景名稱、包名稱、資源名稱」爲參數核心的機制。固然本部分也須要對核心配置文件"UIFormsConfigInfo.json" 作大的改動。(具體在第4節詳述)。
3.3> 因爲UIMangager.cs中,對於直接調用AB框架核心API,有不少不方便的地方。即須要寫不少代碼,且從UI與AB兩大框架解耦的思想出發,特設計一箇中間過渡腳本(例如: ABLoadAssetHelper.cs),利於兩大框架之間的低耦合處理。本設計過程參考經典設計模式中的「代理模式」、「橋接模式」 等思想。
3.4> 以上兩大框架的結合與重構難點在於: 原始UI框架本質是「串行運行」,而AB框架資源調用是「並行運行」。 因此協調資源加載的前後順序是「熱更新UI框架」的重點與難點。
4: 原始UI框架核心類(UIMangager.cs)中對於Json配置文件的改動。
原始配置文件"UIFormsConfigInfo.json" 以鍵值對的方式,存儲了UI窗體預設名稱與UI窗體預設在Resources目錄下的相對路徑的映射關係。可是在改造後的配置文件,全部的AB包都是默認加載到StreamingAssets 目錄下。
因此其配置文件中的「值」,就改成AB包的參數:「場景名稱、包名稱、資源名稱」。由於有三個參數,能夠定義在一行,中間加一個分隔符便可。在程序中能夠作分割處理便可。詳細請讀者查看更新後定義的"UIFormsConfigInfo.json"配置文件。
5: 以上步驟開發完畢後,須要使用UI框架自帶的演示示例項目,作加載驗證測試。
若是能夠正確無誤的運行原UI框架全部的功能設計,則咱們的「熱更新UI框架」,就算是初步重構完畢了。
固然這只是筆者設計的「熱更新框架設計之客戶端熱更框架」的一小部分,咱們在下一篇中,會對國內部分遊戲公司所推崇的「純lua熱更新」框架進行介紹與設計講解,敬請期待。
附錄:
1: UI框架(SUIFW框架Ver1.1) 下載連接:
連接:https://pan.baidu.com/s/1HU22Gr6GpWmT77vp4DcFZg
提取碼:r4r7
2: AssetBundle 框架(ABFW)源碼工程下載連接:
連接:https://pan.baidu.com/s/1VOoL9K3dUTpqxkwCcrQWYw
提取碼:hla8
3:本文講解經過UI與AB框架整合,最終造成的「熱更新UI框架」( UIPlusABFramework)×××連接:
連接:https://pan.baidu.com/s/1C6e2ROHsqSaBEuCtRrzqpA
提取碼:dfq6設計模式