Unity3D資源熱更新(一)

弄了個簡單卻很完整的資源熱更新模板:感覺網上針對5.0以後打包的東西太少了,很多人找了半天還是5.0以前的,要麼就是繞來繞去不繞死你的秀技巧的框架。

現在Vinici基於Unity5.4弄了一個例子供參考,代碼的加載模塊沒有做,這塊感覺變數太大,還是自己根據項目需求來做比較好,道理也是一樣的,用lua的話就加載lua文本,至於後面你要怎麼用,看自己了,那些熱更新框架爲什麼大?就是把很多代碼更新要遇到的情況一股腦列出來了,要是我寫全了估計也沒人有心思看下去,今晚開始寫下來,也方便自己以後記憶。

總體流程:

1、將要打包的資源放在一個目錄下,我圖方便就放在了Resources下,爲什麼這麼做呢?因爲開發時你不可能一直LoadAB包吧,所以我留了兩個接口,開發平臺是用Resources加載,發佈時用Load AB包的方式加載。

打包時根據每個文件起對應的AB名字,記錄下MD5值和大小(以後更新時可直接獲取要更新的包的大小,少一次計算大小的操作何樂不爲!?)我是用逗號分隔符,保存爲CSV文件(微軟的做東西確實好),好處是便於看也便於改啊!

2、啓動遊戲前,刷新所有文件夾,一樣的規則生成MD5和大小,與服務器上的版本文件對比,當有比較不同時,記錄下文件名,比較完成後,下載對應替換服務器文件,跳轉場景。

3、對於運行時加載服務器AB資源,本打算開線程監聽加載請求在去下載的,但是unity很坑爹,這個是後話,換成自帶的IEnumerator 。

思路是:有一個文件加載請求隊列,監聽這個隊列,當隊列中有下載的文件時請求時,去下載或加載,加載完成移出隊列,加載下一個,直到加載完,目前由於用的5.0以後AB資源是分開的,加載請求的依賴關係難以判斷是是否重複,所以只做了單線程加載,原因是Unity的同一個AB資源在內存裏只能有一個!!

4、然後實例化出後,卸載掉內存裏的AB包資源。

整體思路如上,其中還有很多細節和重點,源碼的話我後期會貼出來

今晚碼這麼多字警告自己再也不接操蛋的外包~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章