Skip to content
/ xLua Public
forked from Tencent/xLua

xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.

License

Notifications You must be signed in to change notification settings

liugs/xLua

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Unity3D下Lua编程支持

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

  • C#和Lua可以相互调用对方任意API,访问对方任意数据结构;
  • 编辑器下无需生成代码,开发更轻量;
  • 同时支持Lua5.3和Luajit2.1;
  • Lua函数到C# delegate,Lua table到C# interface的智能适配;
  • 所有基本值类型,所有枚举,以及字段是值类型的struct,在Lua和C#间传递无C# gc alloc;
  • 支持Lua table赋值到C#复杂类型;
  • 反射方式下自动抗代码剪裁;
  • 采用Lazyload技术;
  • 可不修改代码加入第三方Lua扩展;
  • 支持生成引擎二次开发;
  • 内置Lua代码profiler;
  • 支持真机调试;

更详细的特性介绍请看这里

安装

直接解压到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的。

更多示例:

文档

About

xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 58.2%
  • HTML 14.3%
  • C# 11.5%
  • Lua 10.7%
  • CMake 2.2%
  • C++ 1.4%
  • Other 1.7%