热更新及ToLua框架详解

第一篇技术博客,主要是为了自己的记忆理解,希望也能给看到的小伙伴解答一些疑惑。
立个flag,每次学到或者自己领会到新的知识点的时候,尽可能写成一篇博客,方便未来回顾改进,也作为一个分享技术的方法。
博主目前还只是个小菜鸡~~

分割线

首先要先简要描述下热更新是什么东西。

热更的概念是游戏或者软件需要更新时,无需重新下载一个新的客户端,而是在运行的情况下,在内部更新下载资源和代码文件实现更新。

热更的好处显而易见,可以极大程度方便用户进行游戏软件的更新,另外同时使得开发者可以迅速地修改游戏bug,另外减少安装包的大小,所需要的资源可以在运行时另外动态加载。

ToLua

Tolua作为一个常用的热更新框架 ,本质上是提供一个在Unity中可以运行lua的虚拟机,使得lua和c#可以互相调用和访问。

让我们先回到一个简单的问题,为什么要用lua进行热更新?首先lua作为一个解释语言,不需要事先编译成块,而是运行时解释执行,这契合热更特点,另外lua通用性强,并且有大量成熟的项目经验。

  • 基本原理:通过静态绑定的方式来实现C#和lua之间的交互
  • TODO 后续附上详细代码实现和具体细节

热更新基本流程

  1. 版本号的比较,如果版本号不同才继续以下流程(version.txt记录版本号,可选)
  2. 下载资源服务器上的对比文件(files.txt记录所有文件md5码,类似于目录)
  3. 确定下载列表,将最新下载的对比文件和本地旧对比文件对比,记录缺少或不同的文件。(利用files.txt中的md5码实现此步骤)
  4. 根据下载列表,下载所需的资源。(一般放在Application.persistentDataPath)
  5. 解压(如果文件压缩过需要先解压,可选)
  6. 保证下载成功后,用最新的对比文件覆盖本地的对比文件(更新目录)

热更新规则

资源打包方式:需要更新的代码和资源,都必须打包成AssetBundle(AB包)进行下载和加载,AB包的特性适合做热更新。(理由如下)

  • AB包存储位置自定义,继而可放入可读可写的路径下便于实现热更新
  • AB包自定义压缩方式,可以选择不压缩或选择LZMA和LZ4等压缩方式,减小包的大小,更快的进行网络传输。
  • 资源可分布在不同的AB包中,最大程度减少运行时的内存压力, 可做到即用即加载,有选择的加载需要的内容。
  • AB包支持后期进行动态更新,显著减小初始安装包的大小,非核心资源以AB包形式上传服务器,后期运行时动态加载,提高用户体验。

资源存放路径:优先选择将需要进行更新的代码和资源放在Application.persistentDataPath,相较其它特殊目录,该目录下可读可写,运行时有效且无内容限制更适合做热更新开发。

参考文章:https://blog.csdn.net/Q540670228/article/details/122713401

猜你喜欢

转载自blog.csdn.net/weixin_44276280/article/details/130364123