流星

流星消逝的时候,光明已在望。黑暗无论多么长,光明迟早总是会来的。

热更 有更新!

1 热更的定义

在移动游戏上,特指游戏的更新系统,包括代码和资源的更新。
而并非是一边游戏一边进行更新。

2 热更的目的

避免平台审核周期,更新UI功能等。

3 平台相关

IOS做法,由于IOS政策禁止JIT以及任何更新逻辑的方式,通常做法是使用脚本系统例如slua,ulua等。
安卓做法,通常是编译libmono.so修改加载AssemblyCSharp.dll的路径。

4 更新的方式

4.1 一次更新

从客户端当前版本
得到与服务器最新版本的差异文件列表。
下载完成则更新完毕。

4.2 依次更新

从客户端当前版本,得到服务器当前版本对应的下一个版本。
下载完成后继续检查是否到达最新版本。
若没有,则一直按此逻辑。
依版本顺序更新。

5 在客户端集成热更

5.1 选择技术方式

流星这个客户端,会在之后,集成热更新系统。
他使用slua脚本方式,全平台通用。
主要使用在UI和与服务器的通讯部分。
其实之前在动网做过类似的东西。
由于之前使用的那个脚本系统。
C#Light并非一个很完善的脚本系统,导致问题陷入尴尬境地。

5.2 选择更新方式

版本的修改问题。这里使用一次性更新方式。
通常第一个版本例如v0要发布需要先打包所有用到的Resources目录下的文件。
通常是预设,Slua脚本等。
发布后,这些打包好的文件,会生成一张资源清单文件。
资源清单文件里描述了文件列表,包括大小和HASH值。
作为对比的源,就是v0版本的资源清单文件。
该v0版本要更新,就只允许修改/新增Slua脚本和预设。
但是不能创建新的C#类型。
修改完毕后,再次打包,这些打包完毕的预设和脚本。
需要再次生成新版本资源清单,作为对比的目标。
就是v1版本的资源清单文件。
然后对v0和v1做对比。
v0作为基础版本,v1作为新版本。
对比后,会得到新增/修改,也就是差异清单文件。
差异清单文件会描述从v0-v1哪些文件新增/修改了。
字节数多少,md5值多少,会保留当前版本号和目标版本号。
当在v1版本上再一次修改时,得到版本v2。
对比工具,不但会对比v0和v2。
还会对比v1和v2。
每个版本都有他的资源清单文件。
而有一个总文件。
确认了各个版本升级到最新版本的差异清单文件。
这样确保任意的客户端版本。
通过查询最新版本号。
然后查询当前版本号-最新版本号的差异清单文件。
就可以一次性更新。
对于客户端来说。
就不用每次都更新到下一个版本那样。
如果有N个新版本。
就需要更新N次。
而是一次性更新完毕。

6思路

要更新的资源,有以下几种情况
1:在SceneInBuild里的所有场景
2:Resources目录下的所有文件
3:Resources目录下文件依赖到的非Resources目录下的文件
1,扫描所有SceneInBuild里的场景,搜集每个场景依赖的文件列表
2:扫描所有Resources目录下的文件,获取依赖项和自身
3:对每个文件列表里的文件,都可以得到其他依赖项
4:递归其他依赖项,可以得到一个文件全部依赖项目
5:生成文件列表以及文件依赖表和打包脚本

validate