热更新的原理


Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新。

Unity提供可以热更的方案就是AssetsBundle(后面简称AB)。资源、代码都可以打成AB包,放到服务器上,然后比对版本,进行热更。

Unity3D的热更新会涉及3个目录:游戏资源目录、数据目录网络资源地址

游戏资源目录:游戏的安装目录

数据目录:由于“游戏资源目录”在Android和IOS上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。

网络资源地址:又名服务器地址,是用来存放游戏资源的网址。

 

大体热更步骤如下图:

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

这些目录包含着不同版本的资源文件,以及用于版本控制的Files.txt。Files.txt的内容如下图所示,里面存放着资源文件的名称和md5码。

接下来便要尝试代码热更新,让程序下载服务器上的lua文件,然后运行它。在说明热更新之前,需要先看看Unity3D热更新的一般方法。

程序会先下载服务器上的files.txt,然后与本地文件的md5码做比较,更新有变化的文件(步骤2)。

 

引用地址:【Unity游戏客户端框架搭建】五、热更新 - 知乎 (zhihu.com)