Skip to content

6.Hotfix

千空 edited this page Mar 2, 2020 · 2 revisions

在移动平台,游戏启动时会向一个网络地址请求最新的资源和代码文件,该地址在 UnityMMO/config_unitymmo.json 文件里可以配置,见里面的 FileServerURL 字段,把它配置成你的 CDN 地址就可以了,我本地是用 apache 搭了一个 http 服务器,资源放上去供游戏下载。需要注意的是因为 ab 包在各平台格式不一样,所以安卓和 iOS 的 CDN 地址都不一样的,在 AppConfig.WebUrl 里分流。 游戏的资源是放在 Assets/AssetBundleRes 目录里的,但在非 Unity Editor 模式下运行的话还需要打包成 AssetBundle,可以通过 Unity 菜单:LuaFramework/Build xxx Resource 打包并生成所有资源的 MD5 码列表文件 files.txt,Lua 文件不需要打包直接复制过去了,后面可以加下密,现在方便调试就不先加了。

热更流程

  1. 在 Main.cs, 游戏启动经过首次解压后,进入了 State.UpdateResourceFromNet 状态,然后交给负责热更的类处理: AssetsHotFixManager.Instance.UpdateResource
  2. 从 config_unitymmo.json 读取文件服务器地址,然后往该地址下载最新的 files.txt 文件,该文件保存着所有 ab 包和 lua 文件的 MD5 码。
  3. 根据最新的 MD5 码和本地的文件比对,没有或不一样时就下载最新的文件。

TODO

目前都是整个文件的更新,后面需要做成增量更新,可以用 bsdiff 工具提取两个文件的差异部分,然后用户只需要下载该差异部分,然后和旧文件合并为新文件,这样能节省不少流量。 也可以解析 ab 包的格式,然后通过修改 ab 包来做文件级的增量更新。

Clone this wiki locally