腾讯开源手游热更新方案Xlua尝鲜(一)
2017年开年腾讯推出了开源手游热更新方案XLua,在现行大环境下热更新对手游格外重要(广电和苹果的审核机制),但是有些手游在开发过程中并没有涉及到热更新的功能,有的项目已经用C#写完了,这时要接入需要把需要热更的地方用脚本重新实现。即使一开始就接入了,也存在同时用两种语言开发难度较大的问题。 由于审核制度的存在,热更才是硬需求,一切不支持热更方案都是耍流氓!xLua最新的热补丁技术比较完
2017年开年腾讯推出了开源手游热更新方案XLua,在现行大环境下热更新对手游格外重要(广电和苹果的审核机制),但是有些手游在开发过程中并没有涉及到热更新的功能,有的项目已经用C#写完了,这时要接入需要把需要热更的地方用脚本重新实现。即使一开始就接入了,也存在同时用两种语言开发难度较大的问题。
由于审核制度的存在,热更才是硬需求,一切不支持热更方案都是耍流氓!xLua最新的热补丁技术比较完美的解决了上面的问题!
xLua热补丁技术支持在线把一个C#(方法,属性,事件等等)实现替换成Lua实现。这意味着你可以:
1、开发只用C#;
2、运行也是C#,性能可以秒杀lua;
3、出问题了才用Lua来改掉C#出问题的部位,替换甚至做到不用重启游戏;
极其简单的统一接入方式
在启动的地方加入几行代码即可:
if (File.Exists("/path/to/hotfix.lua"))
{
LuaEnv luaenv = new LuaEnv();
luaenv.DoString(File.ReadAllText("/path/to/hotfix.lua"));
}
好,你的应用就有了热补丁的能力了,没有hotfix.lua(名字你可以安装你的需要改)时,什么事情都不干,自然也没开销。你需要在可能需要热更新的类型打上[Hotfix]标签即可。
替换类中的函数(打补丁)
通过某种方式下载了hotfix.lua,hotfix.lua就是修复代码。
先看简单示例:
xlua.hotfix(CS.HotfixTest, 'Update', function()
print('Update in lua')
end
上述代码把C#的HotfixTest类(继承于MonoBehaviour)的Update函数替换成lua的实现。相关API就一个:
xlua.hotfix(class,[method_name], fix)
class是C#的类名,method_name可选,如果写了就替换某函数,没有就是替换类,fix如果给了method_name就提供个函数,没给就通过table提供一组函数。
热补丁支持的C#特性
各种函数,包括私有/公有,静态/成员,操作符重载,泛化函数。
构造函数,析构函数,和普通函数不一样的是,构造函数和析构函数并不是用lua函数替换了,而是执行了lua函数后还会执行原来的逻辑。
属性,包括私有/公有,静态/成员,泛化的。
事件的add/remove。
泛化类型。
总而言之,目前已知唯一尚不支持的是类静态构造函数。
下一篇文章:
腾讯开源手游热更新方案Xlua尝鲜(二)——执行Lua字符串和Lua文件加载
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)