Unity熱更新之資源的上傳與下載


 

資源的上傳

打包結束后,我們通過比較打包前和打包后AssetBundle的MD5值是否有變化來判斷一個AssetBundle是否需要被更新,如果該AssetBundle的MD5值發生了改變,則我們將這個AssetBundle拷貝到我們的待更新文件夾中。更新文件夾的命名應該為當前的大版本號+資源版本號,這樣下載的時候才能找到正確的路徑,更新文件夾目錄結構如下:

 

UpdateFiles
  |--iOS
    |--1.0(大版本號)
       |--170513.1(資源版本號)
          |--VersionFile.txt
          |--StreamingAssets
          |--Prefabs
            |--a.prefab
            |--...
          |--StaticData
            |--...
  |--Android
    |--1.0(大版本號)

 

將所有需要更新的資源拷貝到更新文件夾后,將本次的更新資源的文件夾上傳到資源服務器上。

資源的下載

  1. 獲得服務器版本號,與客戶端當前版本號作比較,如果是大版本更新,去商店下載,如果是小版本更新則去資源服務器下載。
  2. 拼接資源服務器地址,獲得versionFile下載地址,根據大版本號,手機平台和資源版本號得到下載地址為:baseurl/ios/1.0/170513.1/VersionFile.txt
  3. 下載VersionFile,並與上一次手機緩存的VersionFile作對比,生成從上一次更新到這次更新需要下載的文件列表,然后逐一去對應的地址下載下載,資源地址需要根據VersionFile里面的版本號去生成。例如:baseurl/ios/1.0/170512.1/test.txt,baseurl/ios/1.0/170403.1/test.txt。每一個資源去對應的版本文件夾下去下載。
  4. 下載完所有文件后,保存本次下載的VersionFile,等待下一次更新時與新的versionFile再做比較。

當有大版本更新時,更新結束后,應該刪除之前緩存的所有更新,因為新包都是默認帶着所有資源。這樣既減少包的大小,也避免了游戲運行時加載錯資源。因為VersionFile存放了我們所有的更新文件,所以游戲加載資源會根據VersionFile是否存在該資源來決定去加載下載目錄里的資源還是去加載包里面自帶的資源。因此游戲包更新后為了避免加載到上一個版本的資源,應該刪除掉之前下載目錄里的文件。

順便提一下Mac下測試熱更新時,cd到更新文件夾總目錄,然后執行:

python -m SimpleHTTPServer 9001

 

然后下載的baseurl填你的ip:9001就可以在手機測試了。

=================================================

  svn工程里面  AppVersion 腳本里面

 


免責聲明!

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



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