腾讯开源手游热更新方案,Unity3D下的Lua编程

腾讯开源的手游热更新方案xLua,允许在Unity3D中用Lua修复C#代码bug。该方案降低了接入成本,允许项目在C#开发,运行时用Lua修复bug,同时保持高性能。xLua已应用于十多个腾讯自研游戏,支持全平台。文章介绍了xLua的技术背景、热更新流程、易用性、扩展性和性能,以及与其他Lua插件的比较。
摘要由CSDN通过智能技术生成

写在前面

\\

xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。

\\

2016年12月末,xLua刚刚实现新的突破:全平台支持用Lua修复C#代码bug。

\\

目前Unity下的Lua热更新方案大多都是要求要热更新的部分一开始就要用Lua语言实现,不足之处在于:

\\
  1. 接入成本高,有的项目已经用C#写完了,这时要接入需要把需要热更的地方用Lua重新实现;\\t
  2. 即使一开始就接入了,也存在同时用两种语言开发难度较大的问题;\\t
  3. Lua性能不如C#;\

xLua热补丁技术支持在运行时把一个C#实现(函数,操作符,属性,事件,或者整个类)替换成Lua实现,意味着你可以:

\\
  1. 平时用C#开发;\\t
  2. 运行也是C#,性能秒杀Lua;\\t
  3. 有bug的地方下发个Lua脚本fix了,下次整体更新时可以把Lua的实现换回正确的C#实现,更新时甚至可以做到不重启游戏;\

这个新特性iOS,Android,Window,Mac都测试通过了,目前在做一些易用性优化。

\\

那么,腾讯开源的xLua究竟是怎样的技术?它是为何如此设计的?更令人关心的是,xLua的性能如何?带着这些问题,InfoQ对其作者进行了采访并将内容整理成文。

\\

嘉宾简介

\\

车雄生,05年毕业,在华为工作了6年,跟着先后在两游戏创业公司待了几年,15年进入腾讯互娱公共组件中心。目前专注于一些游戏公共组件的开发。

\\

技术背景

\\

腾讯自研手游,就我了解的项目来说,大多数游戏引擎都是Unity3D,少数用coco2d。

\\

xLua这个插件具体用到了哪些游戏中?虽说xLua是2015年3月就完成了第一个版本,但由于当时项目组热更的意识并没有很普遍,需求不是很强烈,xLua的开发资源都调到更紧急的项目了。直到15年年底正式集成到我们的apollo手游开发框架,才迎来xLua的第一个项目。到目前为止,我们已知的应用了xLua的项目有十多个,其中不乏一些重量级IP,或者按星级标准打造的产品。

\\

在xLua之前,面对iOS无法热更新的问题,有用ulua的,有用slua的,也有项目用自研的脚本语言,不过当时用人更新的项目也不多。

\\

热更新流程

\\

手游的热更新流程很简单,只是启动时检测下是否有新版本文件,有的话就下载覆盖老文件,然后启动。

\\

1.png

\\

下载的文件如果是图片,模型这些是没问题的,但如果是Unity原生的代码逻辑,无论是以前的Mono AOT或者后来的il2cpp,都是编译成native code,iOS下是跑不了的。

\\

解决办法就一个,别用native code,别用jit,解析执行就可以了。包括xLua在内的所有热更新支持方案都是通过“解析执行”来实现代码逻辑热更新。

\\

来自xLua的 Hello world

\\

(1)三行代码跑lua脚本

\\

一个完整的例子仅需3行代码:

\\

下载xLua后解压到Unity工程Assets目录下,建一个MonoBehaviour拖到场景,在Start里头加上这么三行:

\\
\XLua.LuaEnv luaenv = new XLua.LuaEnv();\luaenv.DoString(\"CS.UnityEngine.Debug.Log('hello world')\");\luaenv.Dispose();\
\\

运行就可以看到Console打印的hello world。

\\
  1. 第一和第三行分别LuaEnv的创建以及销毁,所谓LuaEnv可以理解为lua虚拟机,往往整个工程一个虚拟机即可:\\t
  2. DoString里头可以是任意合法的lua代码,例子中调用了UnityEngine.Debug.Log接口打印了一个log(C#的静态函数在
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值