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文件加载


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐