前言
上三篇,我们实现了: Unity3d 基于xlua热更新实现系列一:登录功能熟悉lua重写C# Unity3d 基于xlua热更新实现系列二:Xlua脚本动态加载(半热更新) Unity3d 基于xlua热更新实现系列三:生成AB包导出并实现AB包动态加载(资源半热更改) 探索了,资源更新和逻辑脚本等功能。完整热更新在本文推出,时间花的有点久,主要还是因为更新界面打算用xlua编写的,可是编写了一半放弃了,实在是不顺手啊(任重道远~~~),最后纯C#编写了更新检测、资源下载、解压更新等功能。
效果资源服务器的搭建我是比较从简的方式直接使用了IIS,按如下的方式进行配置:
在E盘新增了HotUpdateServer目录,设置为服务器的根目录。 在下面新建了ResVers文件夹,用于存放更新的内容。versions.json文件是版本的描述文件,用于检查更新时访问。
{
"versions": [
{
"ver": "1.0",
"url": "http://127.0.0.1:5544/ResVers/Ver1.0.zip",
"content": "基础版本的更新内容"
},
{
"ver": "1.1",
"url": "http://127.0.0.1:5544/ResVers/Ver1.1.zip",
"content": "更新了登录界面的面板文字,更新了登录场景的的模型运动,"
}
]
}
更新功能
更新功能是程序运行的第一个功能,先检查更新,根据本地资源的版本号请求服务器资源,有更新时开始下载资源,下载完成一个资源更新本地的资源同时更新本地版本号,直到资源是服务器最新版本的资源。
搭建UI按如图的形式搭建更新界面的UI:
主要的内容是:上面的更新内容的描述 和下方的更新进度UI。
检查更新本地使用了一个version.json文件记录本地的版本信息:
{"version":"1.1"}
检查更新时我们先读取本地资源版本,再请求服务器资源版本。
//检查版本
IEnumerator CheckVersions()
{
WebReq = UnityWebRequest.Get(VerChkUrl);
isProc = true;
WebReq.SendWebRequest();
if (WebReq.isNetworkError || WebReq.isHttpError)
{
Debug.Log(WebReq.error);
}
else
{
while (!WebReq.isDone)
{
if (WebReq.downloadProgress != 0)
yield return 0;
}
if (WebReq.isDone)
{
JsonData data = JsonMapper.ToObject(WebReq.downloadHandler.text);
if (data.ContainsKey("versions") && data["versions"] != null && data["versions"].IsArray)
{
VersionList.Clear();
for (int i = 0; i 0)
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
if (fileName != String.Empty)
{
using (FileStream streamWriter = File.Create(filePath))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = stream.Read(data, 0, data.Length);
if (size > 0)
streamWriter.Write(data, 0, size);
else
break;
}
streamWriter.Close();
streamWriter.Dispose();
}
}
yield return 0;
}
stream.Close();
stream.Dispose();
File.Delete(spath);
SetVersion(verinfo.ver);
}
TipText.text = "解压资源完成!";
if (idx 5)then
MoveUp = false
elseif(cubeObj.transform.localPosition.y
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?