安装SLua
slua 1.1.1 Release
1.解压下载的压缩文件。
2.在Assets中创建Plugins文件夹,将解压的slua-1.1.1>Assets>Plugins中对应版本的放入Plugins文件夹中(当然全部放进去也没关系)
在C#文件中使用lua
1.添加命名空间
2.C#调用lua
lua虚拟机可以解释运行lua程序,每一个lua虚拟机都有一个lua栈,-1表示栈顶,1表示栈底。
3.一些常用的api
4.例子
输出结果:
5.lua与c函数的协议
协议定义了这个c函数执行的参数传递规则和返回值传递规则。c函数通过lua的栈来传递参数和返回值。参数按顺序入栈,第一个参数先入栈,最后一个参数最后入栈,因此lua_gettop可以获取参数的个数,
6.lua和C#的沟通
7.lua调用函数
调用函数用到的是void lua_call (lua_State *L, int nargs, int nresults);
,使用这个参数必须先将要调用的函数压栈,然后将需要的参数按顺序压栈,nargs代表的是参数的个数,nresults代表的是返回值的个数。
结果:
将Vector3写入lua和从lua读取一个Vector3
创建一个简单的表
先看一个简单的使用C#创建表的例子:
首先,使用void lua_newtable (lua_State *L);
创建一张空表并压入栈中,然后压入需要赋给table[“x”]的值,使用lua_setfield
将栈顶的值v赋给table[“x”],(-1是栈顶,-2就是我们的表在栈中的索引,”x”就是键值),同理给table设置键值y对应的值,现在我们的表是table={x=1,y=2}
。然后我们通过lua_getfield
从栈中将表里面的值压栈。
结果:
将Vector3写入lua
下面将vector3写入lua:
这里我们先将vector3的3个坐标压入栈中,这时候,我们的表的索引是-4,每次我们执行lua_setfield
栈顶的元素就被我们放入了我们的表中,因此索引自增。我们用代码检测下我们的表有没有构建正确:
结果:
从lua读取一个Vector3
从lua读取一个vector3。实际上刚刚我们已经用lua_tonumber
从lua中将x,y,z的值从表中读取了出来。
结果:
构建成一个cfunction
cfunction
调用
结果:
参考资料:
1.Lua 5.1 Reference Manual
2.Lua 5.3 中文版手册