前言
上三篇,我们实现了: 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
关注
打赏
热门博文
- Unity3d 插件着色器(Shader)报错Too many texture interpolators...和‘vert‘: output parameter ‘o‘ not ...修复记录
- Unity3d C# 网址url未转义问题(https%3A%2F%2F => https://)网址无法打开问题 URL is missing a protocol e.g. http://...
- Unity3d C# 使用Universal Media Player(ump)插件播放视频的众坑之无法播放视频和VLC播放器依赖的问题
- 软考高级软件架构风格定义以及分类
- Unity 使用NVIDIA FleX for Unity插件实现制作软体、水流流体、布料等效果学习教程
- Unity3d 使用统一可寻址资产系统(Addressables)实现服务器资源热更新和资源版本管理等功能(含源码)
- Unity3d minigame-unity-webgl-transform插件转换微信小游戏报错To use dlopen, you need to use Emscripten‘s...问题
- Unity 利用Skybox Panoramic着色器制作全景图预览有条缝隙问题解决办法
- Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现(含源码)
- Unity3d Windows播放视频(视频流)功能组/插件支持对比
