开发者社区> 银狐游戏开发> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

手游热更新方案xLua开源:Unity3D下Lua编程解决方案

简介: C#下Lua编程支持 xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现; 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc; 编辑器下无需生成代码,开发更轻量; 更详细的特性、平台支持介绍请看这里。
+关注继续查看

C#下Lua编程支持

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua的突破

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

  • 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;
  • 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
  • 编辑器下无需生成代码,开发更轻量;

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

安装

打开zip包,你会看到一个Assets目录,这目录就对应Unity工程的Assets目录,保持这目录结构放到你的Unity工程。

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

lua5.3 vs luajit

xLua有两个版本,分别集成了lua5.3和luajit,一个项目只能选择其一。这两个版本C#代码是一样的,不同的是Plugins部分。

lua5.3的特性更丰富些,比如支持原生64位整数,支持苹果bitcode,支持utf8等。出现问题因为是纯c代码,也好定位。比起luajit,lua对安装包的影响也更小。

而luajit胜在性能,如果其jit不出问题的话,可以比lua高一个数量级。目前luajit作者不打算维护luajit,在找人接替其维护,后续发展不太明朗。

项目可以根据自己情况判断哪个更适合。因为目前lua53版本使用较多,所以xLua工程Plugins目录下默认配套是lua53版本。

快速入门

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

安装好xLua,建一个MonoBehaviour拖到场景,在Start加入如下代码:

XLua.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的。

热补丁

  • 侵入性小,老项目原有代码不做任何调整就可使用。
  • 运行时影响小,不打补丁基本和原有程序一样。
  • 出问题了可以用Lua来打补丁,这时才会走到lua代码逻辑;

这里是使用指南。

更多示例

文档

技术支持

QQ群:612705778 验证答案:有问题先找FAQ

 

https://github.com/Tencent/xlua

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程:sanic异步web框架
Python编程:sanic异步web框架
15 0
JavaWeb开发通过Socket编程实现网页访问(附源代码)
JavaWeb开发通过Socket编程实现网页访问(附源代码)
93 0
(JAVA编程练习):输入两个正整数m和n,求其最大公约数和最小公倍数。
(JAVA编程练习):输入两个正整数m和n,求其最大公约数和最小公倍数。
193 0
5分钟掌握开源图神经网络框架DGL使用
近几年神经网络在人工智能领域的成功应用,让它备受关注和热捧。但是,它自身依然具有本质上的局限性,以往的神经网络都是限定在欧式空间内,这和大多数实际应用场景并不符合,因此,也阻碍了它在很多领域的实际落地应用。
1040 0
Python编程:sanic异步web框架
Python编程:sanic异步web框架
102 0
【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战
Java Spring Cloud最早、最成熟、最流行的开源微服务生态解决方案,经过许多大型互联网公司生产检验的,随着阿里巴巴开源Spring Cloud Alibaba项目,Java微服务生态更加完善。
1932 0
【直播预告】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战
Java Spring Cloud最早、最成熟、最流行的开源微服务生态解决方案,经过许多大型互联网公司生产检验的,随着阿里巴巴开源Spring Cloud Alibaba项目,Java微服务生态更加完善。
3164 0
跨域图片资源权限(CORS enabled image)
HTML 规范文档为 images 引入了 crossorigin 属性, 通过设置适当的头信息 CORS , 可以从其他站点加载 img 图片, 并用在 canvas 中,就像从当前站点(current origin)直接下载的一样. crossorigin 属性的使用细节, 请参考 CORS settings attributes. 什么是 “被污染的(tainted)” canvas? 尽管没有CORS授权也可以在 canvas 中使用图像, 但这样做就会污染(taints)画布。
2176 0
+关注
银狐游戏开发
shop135452397.taobao.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
聚划算iOS平台动态化方案LuaView
立即下载
Node.js性能平台
立即下载
荷鲁斯 移动端第三方库安全检查引擎介绍
立即下载