Unity3D 下 Lua 编程解决方案 xLua

Unity3D 下 Lua 编程解决方案 xLua

MIT
C/C++ 查看源码»
跨平台
腾讯
2017-01-04
两味真火

Unity3D下Lua编程支持

xLua为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更新的可能。当然不仅仅如此,在coco2dx上的实践告诉我们,以Lua为主打语言的游戏客户端编程是可行的。

xLua的突破

xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

  • Unity3D全平台热补丁技术,可以运行时把C#实现(方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;

  • 自定义struct,枚举在Lua和C#间传递无C# gc alloc;

  • 编辑器下无需生成代码,开发更轻量;

更详细的特性、平台支持介绍请看这里

安装

直接解压到Assets下可用。第一次使用建议把例子包也安装,运行看看效果。

如果希望安装到其它目录,请看FAQ相关介绍。

快速入门

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

下载xLua后解压到Unity工程Assets目录下,建一个MonoBehaviour拖到场景,在Start加入如下代码:

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

1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。

2、一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。

C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:

  • 声明

[XLua.CSharpCallLua]public delegate double LuaMax(double a, double b);
  • 绑定

var max = luaenv.Global.GetInPath<LuaMax>("math.max");
  • 调用

Debug.Log("max:" + max(32, 12));

建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。

热补丁

xLua支持热补丁,这意味着你可以:

  1. 开发只用C#;

  2. 运行也是C#,性能可以秒杀lua;

  3. 出问题了才用Lua来改掉C#出问题的部位,下次整体更新时换回正确的C#;能做到用户不重启程序fix bug;

如果你仅仅希望用热更新来fix bug,这是强烈建议的做法。这里是使用指南。

的码云指数为
超过 的项目
加载中

评论(6)

wingzzf
wingzzf
有没有视频教程
肉熊猫
肉熊猫
能做到这热更新bug已经很好了,只是这样得维护两个代码部分,还是很棒了
diguo2046
diguo2046
我start的时候才89,现在已经962了。
Nessax
Nessax
除了热更新 其他没什么吸引力
tangrongjunyx
tangrongjunyx
简洁
haitaosoft
haitaosoft
有没有 Unity3D编写的通用程序,唯一不同的就是url字符串,程序能自动访问url得到lua脚本并执行? 同时支持安卓及ios的??

xLua 2.1.14 发布,腾讯开源的手游热更新解决方案

xLua 2.1.14 发布了。xLua 为 Unity、 .Net、 Mono 等 C# 环境增加 Lua 脚本编程的能力,借助 xLua,这些 Lua 代码可以方便的和 C# 相互调用。xLua 在功能、性能、易用性都有不少突破,这几方...

02/28 07:40

xLua 2.1.13 发布,腾讯开源的手游热更新解决方案

新增特性 新增AdaptByDelegate注入模式; 新增xlua.get_generic_method,用于调用泛型函数; 支持类似CS.System.Collections.Generic.List(CS.System.Int32)的泛型写法; 注入新选项:忽略编...

2018/12/06 07:36

xLua 2.1.12 发布,腾讯开源的手游热更新解决方案

新增特性 Nullable的支持 支持Assembly-CSharp之外的dll注入(beta) 执行xlua.hotfix,会自动让该类private能访问 xlua.private_accessible优化:1、会把基类的也设置能私有访问;2、延迟到...

2018/07/10 10:38

xLua 2.1.11 发布,腾讯开源的手游热更新解决方案

新增特性 1、xlua.private_accessible 支持私有内嵌类型 2、添加 xlua.release ,用于主动解除 lua 对 c# 某对象的引用 3、支持内嵌委托的显示构造 4、需要传 class 的地方(比如 xlua.priva...

2018/03/21 10:30

xLua 2.1.10 发布,腾讯开源的手游热更新解决方案

新增特性 1、新增DoNotGen配置,支持一个类型部分函数用反射,部分用生成; 2、新增wrapper的emit; 3、webgl支持; 4、lua实现interface支持interface继承; 5、window下支持android编译(由...

2017/09/19 07:47

xLua 2.1.8 发布,腾讯开源的手游热更新解决方案

新增特性 1,修补程序标签添加几个订制参数:ValueTypeBoxing,IgnoreProperty,IgnoreNotPublic,内联,IntKey 2,修补程序代码注入优化,减少文本段占用; 3,修复配置支持放编辑目录,可以...

2017/06/27 17:32

xLua 2.1.6 发布,腾讯开源的手游热更新解决方案

xLua 是腾讯开源的手游热更新解决方案,有以下特性: Unity 下 Lua 编程支持 xLua 为 Unity 增加 Lua 脚本编程的能力,进而提供代码逻辑增量更新的可能。当然不仅仅如此,在 coco2dx 上的实践...

2017/03/03 07:41

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

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

2017/01/04 07:28

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

u3d+xlua简单总结

一、场景切换 1.使用一个空场景:MainScene 2.在场景里面建立一个空的GameObject:MainFacade 3.在MainFacade上挂载处理xlua的mono类:LuaFacade 4.在LuaFacade中使用静态变量保存lua的虚拟机...

2018/05/10 11:53
19
0
关于LUA+Unity开发_toLua篇【一】

网上有许多的LUA与Unity插件,如toLua,uLua, sLua, xLua。 uniLua由于其复杂的集成使用过程,已经被主流所抛弃了。在对各个插件使用过之后,出此系列博客与大家分享一下心得。 前面两篇计划...

2018/01/13 17:36
2.4K
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部