Unity5系列資源管理AssetBundle——更新實現


前面我們研究了AssetBundle的打包與加載,現在我們來了解下如何在項目中根據版本號更新內容。

最最重要的一點,細心的朋友應該看到了在加載AssetBundle的MrcAssetManager類中,我們使用的WWW加載對象可以使用WWW.LoadFromCacheOrDownload方法,其中第一個參數是資源的url,第二個參數則是我們的要加載的版本號,我們將通過這個版本號決定是不是要重新從服務器上下載。
因此,我們需要在本地和服務器上分別建立一個版本配置文件,里面包含了版本號、資源大小、更新時間、內容等一系列信息,至於存儲方式可以是XML、JSON等合適你的格式,這里我用XML講解。
我們可以建立版本控制類VersionManager,在游戲開始時,讀取本地的版本號並下載服務器的版本信息。
讀取本地版本信息:

 1 private int GetLocalVersion()
 2 {
 3     Debug.Log(path);
 4     if (!File.Exists(path))
 5     {
 6         XmlDocument doc = new XmlDocument();
 7         XmlElement version = doc.CreateElement("version");
 8         version.InnerText = "1";
 9         doc.AppendChild(version);
10         doc.Save(path);
11  
12         Debug.Log("created xmlVersion successfully!");
13     }
14  
15     XmlDocument docRead = new XmlDocument();
16     docRead.Load(path);
17     XmlElement versionRead = docRead.SelectSingleNode("version") as XmlElement;
18     return int.Parse(versionRead.InnerText);
19 }

下載讀取服務器的版本信息,如果不一致更新本地資源和版本信息:

 1 private void CheckVersion()
 2     {
 3         string url = "http://.../UnityFiles/AssetBundlesForBlog/LOUnityAssetversion.xml";
 4         StartCoroutine(GetServerVersion(url));
 5     }
 6  
 7     private IEnumerator GetServerVersion(string url)
 8     {
 9         WWW www = new WWW(url);
10         yield return www;
11  
12         XmlDocument doc = new XmlDocument();
13         doc.InnerXml = www.text;
14          
15         XmlElement version = doc.SelectSingleNode("version") as XmlElement;
16  
17         ServerVersion = int.Parse(version.InnerText);
18  
19         LocalVersion = GetLocalVersion();
20         if (LocalVersion < ServerVersion)
21         {
22             Debug.Log("need update");
23             //更新本地版本信息
24             OverrideLocalVersion();
25         }
26  
27         TestScript.DefaultTest.StartLoad();
28     }
29  
30     private void OverrideLocalVersion()
31     {
32         XmlDocument docWrite = new XmlDocument();
33         docWrite.Load(path);
34         XmlElement versionWrite = docWrite.SelectSingleNode("version") as XmlElement;
35         versionWrite.InnerText = ServerVersion.ToString();
36         docWrite.Save(path);
37     }

最后,將AssetBundle管理類MrCAssetManager中WWW對象的版本號改為使用我們的當前版本號,就可以啦。這樣,當我們更新了服務器上的AssetBundle資源后,只要修改下服務器上的版本號,客戶端就會因為對比版本不一致而重新下載,而如果一致,就會使用存在本地的AssetBundle資源而不重新下載。

 


免責聲明!

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



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