1. 程式人生 > >Unity3D資源熱更新(一)

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包資源。

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

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