主流热更新方案介绍(C#)

热更新

热更新分为 资源热更新 和 代码热更新 两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新。

  • 资源热更新:主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包。
  • 代码热更新:主要包括Lua热更新、ILRuntime热更新和C#直接反射热更新等。由于ILRuntime热更新还不成熟可能存在一些坑,而C#直接反射热更新又不支持IOS平台,因此目前大多采用更成熟的、没有平台限制的Lua热更新方案。

热更新原理

游戏中一些UI界面和某些模型等等的显示都是通过去加载相应的素材来实现的,当我们只把对应的素材资源进行替换就可以界面和模型发生变化,这个时候我们可以让客户端通过资源对比后从而进行相关资源的下载就可以实现热更新了。

  • C#热更原理:将需要频繁更改的逻辑部分独立出来做成DLL,AssemblyLoadContext主要用于热更新/插件程序,在主模块调用这些DLL,主模块代码是不修改的,只有作为业务(逻辑)模块的DLL部分需要修改。游戏运行时通过反射机制加载这些DLL就实现了热更新。
  • lua热更原理:逻辑代码转化为脚本,脚本转化为文本资源,以更新资源的形式更新程序。

为什么很多都采用lua热更新而不是C

服务端热更新

服务端一般都是代码热更新, 所以服务端更新很方便且没有太多限制, 那么采用C#和lua都可以, 且都很方便.

  • C#热更新,使用AssemblyLoadContext
  • lua热更新,使用NLua

客户端热更新

客户端热更新如果采用C#直接反射热更新时IOS平台不支持,因此目前大多采用更成熟的、没有平台限制的Lua热更新方案

  • lua热更新

目前主流热更新方案

  • Lua热更新插件(如ulua、slua、tolua、xlua等)
  • HyBridCLR(原huatuo),是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案
  • ILRuntime热更
  • puerts

扩展阅读

Unity 热更新系列

此处评论已关闭