unity xlua热更新总结

前言:

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

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

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

1、接入成本高,有的项目已经用C#写完了,这时要接入需要把需要热更的地方用Lua重新实现;

2、即使一开始就接入了,也存在同时用两种语言开发难度较大的问题;

3、Lua性能不如C#;

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

1、平时用C#开发;

2、运行也是C#,性能秒杀Lua;

3、有bug的地方下发个Lua脚本fix了,下次整体更新时可以把Lua的实现换回正确的C#实现,更新时甚至可以做到不重启游戏;

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

个人对XLua看法

  1. 简洁易用,容易上手
  2. 可扩展性高,添加自定义的CS模块或者第三方插件非常方便
  3. 大厂维护,可靠
  4. 特色:HotFix 
    关于这个HotFix是其他热更lua框架所不具备的,也是他最大的优势和特色之一,原理就是通过特性标记然后在IL逻辑层判断修改逻辑,使程序支持热更的lua逻辑代码而不是走之前的C#逻辑

XLua文档:

(必看)xlua教程:Assets/XLua/Doc/XLua教程.md · Gitee 极速下载/xlua - Gitee.com

(必看)xlua的配置:Assets/XLua/Doc/configure.md · Gitee 极速下载/xlua - Gitee.com

   xlua的API:https://gitee.com/OcxnO/XLua/blob/master/Assets/XLua/Doc/XLua_API.md

   热补丁操作指南:https://gitee.com/OcxnO/XLua/blob/master/Assets/XLua/Doc/hotfix.md

  常见问题解答:https://gitee.com/OcxnO/XLua/blob/master/Assets/XLua/Doc/faq.md

### Unity使用 XLua 进行热更新 #### 配置环境 为了使 Unity 支持通过 XLua 实现热更新功能,需先完成一系列基础配置工作。这包括但不限于下载并解压 XLUA 压缩包至项目 `Assets` 文件夹内,并确保复制了 `xlua` 和 `plugins` 目录下的所有内容[^2]。 #### 开启热补丁特性 在项目的编译选项里加入宏定义 `HOTFIX_ENABLE` 以启用热修补能力;如果遇到特定接口或委托对象提示缺少 `CSharpCallLua` 属性,则应在相应的地方补充此属性声明来解决问题。 #### Lua 脚本加载方式 对于希望执行的 Lua 代码片段可以直接利用 `LuaEnv.DoString()` 方法传入一段包含有效命令序列的字符串实现即时解析与执行操作。例如打印一条简单的日志消息可以这样写: ```csharp luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); ``` #### 绑定事件处理程序 当涉及到 UI 控件上的交互逻辑时,比如按钮点击响应动作,可以通过将 Lua 解析器中的匿名函数作为回调参数传递给控件绑定机制达成目的。下面是一个关于如何修改现有 C# 类成员方法的具体例子: ```csharp // 定义于 C# public class HotfixTest : MonoBehaviour { public int tick; void Update() { /* ... */ } } // 修改后的 Lua 版本 xlua.hotfix(CS.XLuaTest.HotfixTest, 'Update', function(self) self.tick = self.tick + 1 if (self.tick % 50) == 0 then print('<<<<<<<<<Update in lua, tick = ' .. self.tick) end end); ``` 上述过程展示了怎样运用 xLua 的 hotfix 功能覆盖原有行为模式,在不改变原生代码的前提下灵活调整游戏内部的工作流程[^1]。 #### 协程管理 除了基本的功能扩展外,还可以借助 Lua 来控制 MonoBehaviors 上启动/暂停协程的行为。通常会创建一个新的 GameObject 并附加指定类型的组件实例,随后把相关联的操作封装在一个表格结构里面供外部调用[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值