前面我们研究了AssetBundle的打包与加载,现在我们来了解下如何在项目中根据版本号更新内容。

最最重要的一点,细心的朋友应该看到了在加载AssetBundle的MrcAssetManager类中,我们使用的WWW加载对象可以使用WWW.LoadFromCacheOrDownload方法,其中第一个参数是资源的url,第二个参数则是我们的要加载的版本号,我们将通过这个版本号决定是不是要重新从服务器上下载。
因此,我们需要在本地和服务器上分别建立一个版本配置文件,里面包含了版本号、资源大小、更新时间、内容等一系列信息,至于存储方式可以是XML、JSON等合适你的格式,这里我用XML讲解。
我们可以建立版本控制类VersionManager,在游戏开始时,读取本地的版本号并下载服务器的版本信息。
读取本地版本信息:

 private int GetLocalVersion()
{
Debug.Log(path);
if (!File.Exists(path))
{
XmlDocument doc = new XmlDocument();
XmlElement version = doc.CreateElement("version");
version.InnerText = "";
doc.AppendChild(version);
doc.Save(path); Debug.Log("created xmlVersion successfully!");
} XmlDocument docRead = new XmlDocument();
docRead.Load(path);
XmlElement versionRead = docRead.SelectSingleNode("version") as XmlElement;
return int.Parse(versionRead.InnerText);
}

下载读取服务器的版本信息,如果不一致更新本地资源和版本信息:

 private void CheckVersion()
{
string url = "http://.../UnityFiles/AssetBundlesForBlog/LOUnityAssetversion.xml";
StartCoroutine(GetServerVersion(url));
} private IEnumerator GetServerVersion(string url)
{
WWW www = new WWW(url);
yield return www; XmlDocument doc = new XmlDocument();
doc.InnerXml = www.text; XmlElement version = doc.SelectSingleNode("version") as XmlElement; ServerVersion = int.Parse(version.InnerText); LocalVersion = GetLocalVersion();
if (LocalVersion < ServerVersion)
{
Debug.Log("need update");
//更新本地版本信息
OverrideLocalVersion();
} TestScript.DefaultTest.StartLoad();
} private void OverrideLocalVersion()
{
XmlDocument docWrite = new XmlDocument();
docWrite.Load(path);
XmlElement versionWrite = docWrite.SelectSingleNode("version") as XmlElement;
versionWrite.InnerText = ServerVersion.ToString();
docWrite.Save(path);
}

最后,将AssetBundle管理类MrCAssetManager中WWW对象的版本号改为使用我们的当前版本号,就可以啦。这样,当我们更新了服务器上的AssetBundle资源后,只要修改下服务器上的版本号,客户端就会因为对比版本不一致而重新下载,而如果一致,就会使用存在本地的AssetBundle资源而不重新下载。

Unity5系列资源管理AssetBundle——更新实现的更多相关文章

  1. Unity5系列资源管理AssetBundle——打包

    资源管理是游戏开发的重要环节,Unity中使用AssetBundle可以非常方便地帮我们打包和更新游戏内容,在5系列中,AssetBundle更是方便好用,现在让我们先进行打包吧. 刚说了,5系列打包 ...

  2. Unity5系列资源管理AssetBundle——加载

    上次我们进行了AssetBundle打包,现在我们还把打包的资源加载到我们的游戏中.在加载之前,我们需要把打包好的Bundle包裹放到服务器上,如果没有,也可以使用XAMPP搭建本地服务器. 加载的A ...

  3. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. Unity5.x版本AssetBundle加载研究

    之前说了 “Unity5.x版本AssetBundle打包研究”,没看过的请先看一下:http://www.shihuanjue.com/?p=57 再来看本文,有一定的连接性. 先梳理一下思路: 要 ...

  5. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  6. Unity5.X 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  7. Unity5.4新版AssetBundle资源打包

    (1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...

  8. Unity5.X 新版AssetBundle打包控制

    一.什么是AssetBundle 估计很多人只知道Unity的模型之类的东西可以导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载出来用.那么AssetBund ...

  9. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

随机推荐

  1. SQLServer批量更新

    两种写法,暂未知道区别 1. UPDATE aSET a.resblockid = ( SELECT b.resblockId FROM yyy.dbo.yyy b WHERE a.unitId = ...

  2. 初步使用nodejs(一)

    初步使用nodejs(一) 首先打开 https://nodejs.org/,点击INSTALL下载安装 安装完成后 打开CMD 输入node –v 验证是否正常 至此,NODEJS安装完成. 下载W ...

  3. linux操作系统简单使用

    文章将包含几个内容: linux简介 linux操作系统的安装简述 linux操作系统的磁盘文件结构 linux操作系统中的文件操作 linux中的用户管理 网络配置管理 常用系统管理指令 linux ...

  4. java http url post json

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import ja ...

  5. 关于java集合排序

    对于排序,java开发者并不陌生. 为避免以后遗忘,现在再次总结一下! 常见8大排序算法, 平时自己熟悉的只有几种种!冒泡,二分/折半.插入.快排等!现在一一讲解一下,这里只讲思想,暂时不做实现! 一 ...

  6. CODE[VS]-蛇形矩阵-模拟-天梯白银

    题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该 ...

  7. #if和#ifdef区别

    #if  是要去判断, 跟值有关 #ifdef  只要定义了即可, 就会走下面的代码, 不管值是0还是1 所以一般都是用#ifdef DEBUG调试

  8. idea新建项目文件名为红色的解决办法

    Perference->version Control ->Directory添加项目路径,vcs选<none> 即可.

  9. Scala 中的 apply 和 update 方法[转]

    原文链接:http://blog.csdn.net/lyrebing/article/details/21696581 Scala 是构建在 JVM 上的静态类型的脚本语言,而脚本语言总是会有些约定来 ...

  10. C# ExcelHelper

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...