游戏大版本更新和热更新

作者: 叶小榕 | 来源:发表于2017-04-09 22:02 被阅读940次

游戏上线后,遇见bug或者需要更新内容(包括资源,玩法,数值调整,游戏脚本等)的时候,一般有2种做法。第一种,发个新包,然后让玩家下载新的版本;第二种,在游戏内更新,游戏启动时去下载需要更新的资源。第一种我们一般称为游戏大版本更新,第二种称为热更新。

一般来说,不能通过小版本更新解决的问题,才会用到大版本更新,例如,不可热更的游戏代码。而热更新是建立在每次大版本更新的基础上进行的更新,因此,这2种更新方式应该互相承接。

我们可以通过版本文件和更新文件以及版本号来实现大版本更新和热更新。游戏的版本号由大 版本+资源版本 构成,每一次大版本更新,大版本号增加,资源版本号重置。每一次热更新,大版本号不变,资源版本号增加。

版本文件(MD5File)记录每一个资源的MD5值。

例如:

a.txt,1630d23f45464df6071a9948dd1592bf

b.texture,f9c985a8f2a86292a024c4ed21ed33fb

更新文件(UpdateFile)记录每一个更新文件的资源版本号,资源版本号对应玩家去服务器上哪个版本库里下载资源。

例如:

a.txt,0.1

c.txt,0.2


大版本更新流程:

1.清除之前的版本文件和更新文件

2.打包所有的资源

3.计算每个资源的MD5值,创建新的版本文件,将所有资源的资源名称和对应的MD5值保存在版本文件中。

热更新流程:

1.打包所有资源

2.计算每个资源的MD5值,并和版本文件中记录的MD5值做比较,将MD5值发生变化的资源和被删除的资源记录下来。

3.

如果不存在更新文件,即现在是在大版本后的第一次热更新,创建一个更新文件,将所有MD5值发生变化的资源的名称和其版本号记录在更新文件中,格式为为【文件名,当前资源版本号】。


如果已经存在更新文件,即现在是在上一次热更新之后继续热更新。首先读取上一次的更新文件,然后遍历本次MD5值发生变化的资源,如果资源名称在更新文件中存在,则将更新文件中该资源版本号置为当前版本;如果资源名称在更新文件中不存在,则在更新文件中添加新的记录,存放其资源名称和当前资源版本号;如果更新文件中存在被删除的资源名称,将该资源的记录从更新文件中移除。
4.上传需要更新的资源和更新文件(UpdateFile)到服务器
5.删除原来的版本文件,将所有资源的MD5值保存在新的版本文件中。

玩家进入游戏后,首先判断是否需要更新版本,如果是大版本更新,则提示需要重新下载安装包;如果是小版本更新,则先下载更新文件(UpdateFile),然后根据更新文件中的资源名和版本号去对应的地址下载资源。

服务器下载目录结构

UpdateFile.txt

0.1(资源版本号文件夹)

-------a.txt

0.2(资源版本号文件夹)

-------a.txt

-------c.txt

0.3(资源版本号文件夹)

-------a.txt

-------d.txt

假设UpdatFile.txt内容为:

a.txt,0.3

c.txt,0.2

d.txt,0.3

如果玩家的版本是0.1,则玩家需要去0.3的目录下下载a.txt和d.txt,去0.2的目录下下载c.txt.。

如果玩家的版本是0.2,则玩家只需要去0.3的目录下下载a.txt和d.txt。

通常会在客户端缓存玩家下载过的资源和版本号,然后与updateFile文件做对比,生成需要下载的文件列表,然后去服务器下载即可。

相关文章

  • 游戏大版本更新和热更新

    游戏上线后,遇见bug或者需要更新内容(包括资源,玩法,数值调整,游戏脚本等)的时候,一般有2种做法。第一种,发个...

  • JSPath热更新和热修复 个人小结

    热更新和热修复 个人小结 热修复和热更新 1 热更新和热修复:在线修复程序的 BUG 2 JSPach 的使用原理...

  • Bugly 版本更新和热修复接入

    提起版本更新,是每个app和开发者最熟悉的东西,但是频繁的更新会让用户反感,但是不更新的话在发现了bug怎么办呢?...

  • 热更新和ILRuntime

    在上一篇[https://www.jianshu.com/p/59e418c58a12]文档中提到了unity的c...

  • RN热更新原理

    热更新 ReactNative告别CodePush,自建热更新版本升级环境 微软的CodePush热更新非常难用大...

  • react-native如何热更新(android)

    RN的热更新和weex的热更新不同,weex是可以直接访问远程服务器的,有新版本的时候直接更换服务器上的文件就行,...

  • ReactNative 基本的版本管理

    ReactNative 版本更新较为频繁我们要随时做好版本的更新和控制; 查看当前版本: $cd (项目目录)$r...

  • Android-Bugly 版本更新和热修复接入

    详解 提起版本更新,是每个app和开发者最熟悉的东西,但是频繁的更新会让用户反感,但是不更新的话在发现了bug怎么...

  • ionic2/3-热更新(cordova-hot-code-pu

    前言 code-push热更新请参照文章ionic2/3-热更新(code-push) code-push热更新和...

  • 热更新

    热更新技术背景 1.热更新定义,APP热更新,就是指软件不通过苹果APP Store的版本更新审核,直接可以自行更...

网友评论

  • 泡泡_bbb9:想请问 你们生产业务线的时候, 服务端应该会对热更资源文件进行加密吧,不然网络传输工程代码就一目了然了。你们是用什么方式处理加密文件的呢
  • 耿直boy:一脸懵逼,android现在要热更assets文件夹的游戏源码。请教一波
    叶小榕:@耿直boy 这个没有试过,不清楚了
    耿直boy:@叶小榕 项目的游戏源码是h5 js css,放在Android的assets目录下。这个怎么弄。
    叶小榕:@耿直boy Android更新源代码可以用dll,也可以用lua

本文标题:游戏大版本更新和热更新

本文链接:https://www.haomeiwen.com/subject/dxcjattx.html