热更新是指当游戏出现bug,或者需要修改,增加某个功能的时候,我们不需要重新下载安装包,就可以更新游戏内容
游戏上线后,遇见bug或者需要更新内容,一般有两种做法:
第一种:重新打包上传一个新的安装包到应用商店(需要审核,费时间),然后让玩家下载新的客户端安装包(需要重新下载,费流量)
第二种:在游戏内更新,游戏启动时去下载需要更新的资源
第一种我们一般称为游戏大版本更新,第二种称为热更新
例如一个用Unity制作的游戏,脚本是用C#编写的,现在游戏中有一个地方的数值需要修改,也许只有几KB,但是因为是用的C#语言(必须重新编译为dll文件才可以,不能在移动平台直接替换)所以必须重新打成安装包发布,显然重新发布下载安装很没有意义,但是如果是用Lua语言编写的,则可以在移动端直接替换,不需要重新编译
大部分的热更新实现都基于Lua这个语言,之前介绍过,因为Lua轻量小巧,跨平台,易扩展,最重要的是用Lua编写的脚本修改后可以在移动端直接替换运行,不像C#需要重新编译
Lua介绍
1.C#Light:
是框架作者开发的一种小巧的脚本语言(不是基于Lua语言的),能在各个平台实现热更新,但该框架早已停止维护
2.利用C#的反射:
这种方式只支持windows以及安卓这种支持JIT的平台,对于IOS就不适用了,IOS这种Full-AOT的平台不支持生成新的代码,因此这种热更方式很少用到
3.uLua:
是Lua的第一款插件,但是现在已经停止更新不再维护
4.sLua:
代码质量好(代码比toLua代码更清晰),但是性能低于toLua。
5.toLua:
uLua停止更新后出现的新的热更新插件,基于toLua作者开发了一款luaframework,目前比较主流
6.ILRuntime:
是掌趣科技开发的开源unity热更框架, 这个框架打破了C#不能做ios平台热更的规则(在ios平台中是以ILRuntime+dll的方式解释执行,当然是在IL2CPP下)。有了这个框架,开发者只需使用C#这一种语言即可,而不用在C#和lua之间切换,但这个框架也是有很多坑的,在一些方面性能是不如lua的,Git上的贡献者也很少,暂时没有经过大量项目的考验,用的人相对还是比较少
7.xLua:
腾讯开发的Lua插件,目前比较主流
xLua是腾讯开发的开源Lua插件,它为Unity,.Net,Mono等C#环境增加Lua脚本编程的能力,借助xLua可以使lua代码与C#相互调用
游戏中的更新包括资源更新(UI,Audio等)和代码更新,资源可以通过打AB包放在服务器上,Lua代码可以直接放在服务器端,玩家启动游戏时会去服务器端检查更新进行替换(使用MD5校验)