找回密码
 立即注册
查看: 510|回复: 1

[笔记] 【Unity游戏客户端框架搭建】五、热更新

[复制链接]
发表于 2022-6-17 20:05 | 显示全部楼层 |阅读模式
前言

游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小。
如果出现重大bug,而又没有热更技术,那么我们为了修复bug就只能强制玩家去商店下载新包,那造成的玩家流失是非常可怕的。
而如果有热更,我们在发现问题的当天,只需要发布一个小补丁包,就能将问题修复了。
目录


  • 热更新的原理
  • 热更新的基本流程
热更新的原理

Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新。
Unity提供可以热更的方案就是AssetsBundle(后面简称AB)。资源、代码都可以打成AB包,放到服务器上,然后比对版本,进行热更。
Unity3D的热更新会涉及3个目录:游戏资源目录、数据目录、网络资源地址。
游戏资源目录:游戏的安装目录,如下所示
Mac OS或Windows:Application.dataPath + "/StreamingAssets";
IOS: Application.dataPath + "/Raw";
Android:jar:file://" + Application.dataPath + "!/assets/";
数据目录:由于“游戏资源目录”在Android和IOS上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。
不同平台下,“数据目录”的地址也不同,LuaFramework的定义如下:
Android或IOS:Application.persistentDataPath + "/LuaFramework"   
Mac OS或Windows:C:/LuaFramework/
调试模式下:Application.dataPath + "/StreamingAssets/"
网络资源地址:又名服务器地址,是用来存放游戏资源的网址。

大体热更步骤如下图:

  • 步骤①第一次开启游戏后,程序将“游戏资源目录”的内容复制到“数据目录”中。(这个步骤只会执行一次,下次再打开游戏就不复制了)。
  • 步骤②游戏开启后,程序会从“网络资源地址”下载一些更新的文件到数据目录。
  • 步骤③游戏过程中的资源加载,都是从“数据目录”中获取、解包。


这些目录包含着不同版本的资源文件,以及用于版本控制的Files.txt。Files.txt的内容如下图所示,里面存放着资源文件的名称和md5码。
接下来便要尝试代码热更新,让程序下载服务器上的lua文件,然后运行它。在说明热更新之前,需要先看看Unity3D热更新的一般方法。
程序会先下载服务器上的files.txt,然后与本地文件的md5码做比较,更新有变化的文件(步骤2)。


二、热更新的基本流程

接下来讲一下热更的基本流程:热更分成2部分

  • 导出热更资源
  • 游戏流程热更
2.1、导出热更资源


  • 打包热更资源的对应的md5信息(涉及到增量打包)
  • 上传热更ab到热更服务器
  • 上传版本信息到版本服务器
2.2、游戏流程热更


  • 启动游戏
  • 根据当前版本号,和平台号去版本服务器上检查是否有热更
  • 热更服务器上下载md5文件,比对需要热更的具体文件列表
  • 热更服务器上下载需要热更的资源,解压到热更资源目录
  • 游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载
更新注意:
       1.  要有下载失败重试几次机制;
       2.  要进行超时检测;
       3.  要记录更新日志,例如哪几个资源时整个更新流程失败。
3. md5信息





这边md5文件存了信息,分别是ab路径、MD5值、未压缩文件大小、压缩文件大小。
4. 版本号管理
客户端版本号我们是4位来标识,假设是X.Y.Z.W,下面是XYZW值对应的意义:
X:【巨大版本号】这一位其实就是1,没事一般不会动他,除非有太巨大的变化,目前反正还是1;
Y:【整包更新版本号】:我们游戏一般一个月会有一个比较大的版本迭代,这种版本会走商店,每次提交Y值+1;
Z:【服务器协议版本号】,一个月度版本周期内,万一SDK有问题或者C#层有发现bug,需要更新商店,这一位会+1,这里单独留一个Z处理这种商店版本号,是因为不想影响Y值,而商店提交新包要求版本号必须有增加,buildNum也是商店要求必须要升的;
W:【编译版本号\热更版本号】,每次热更都+1 。
【第2位加1之后,3、4位全部清0】
比如目前商店版本号是1.1.0.0,这个版本我们热更了3次后,版本号就变成1.1.0.3,
这时候发现好像C#层有一点bug必须要修复,那打一个1.1.1.3提交商店,1.1.1.3包里的资源和1.1.0.3的资源是一模一样的,这之后如果有第4次热更,那热更包的版本号就是1.1.1.4。
后面在说到检测热更的时候会用到以上版本号信息。
<hr/>2020.12.11 XAsset 开箱试玩
使用教程:xasset入门指南 - TA养成记 、默默的奶爸:XASSET 4.0入门指南
自己实践的代码:Aver58/TeddyFrameWork
实践步骤:


  • 网上HFS工具,这是一个本地的资源服务器,我们可以用它做实验
  • 将打包出来的bundle上传到本地文件服务器
  • 然后就可以用浏览器的http请求指定文件路径,获取文件
  • XAsset的热更流程大致就以下这样,大家搭建的时候可以参考一下


参考:

具体实践见:ToLua热更新之LuaFramework框架之代码热更新(一)_居安思危,游戏人生。-CSDN博客
Unity3D热更新之LuaFramework篇[08]--热更新原理及热更服务器搭建 - 子非鱼` - 博客园
这里推荐芳芳大佬写的热更课程,学到蛮多东西:成熟的Unity热更新以及版本管理的解决方案

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-6-17 20:05 | 显示全部楼层
能结合框架里面代码 就更好了,哈哈
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-4 01:39 , Processed in 0.097783 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表