Xlua

1. 执行一个lua 代码.

LuaEnv lua = new LuaEnv();

lua.dostring("print('hello world')");

2. 也可以使用

LuaEnv lua = new LuaEnv();

lua.dostring(require'another');    another.lua.txt 是一个放在resources下的文件, 记录lua代码

3. 获取lua代码中的全局变量

lua.Global.Get<int> ("a"); 或者是lua.Global.Get ("b", out b);.  这个变量可以直接在another下, 也可以是在another 引用的另一个lua.txt文件下的全局变量, 都是可以, 不会报错的

4. 可以把lua 中的table 映射成 c# 中的对象或者是结构体 , 但是测试中表明, xlua 会把lua中的table 对象映射成C# 的对象, 但是只能调用空参构造. 如果c#的类没有空参构造, 那么返回的对象就是空

5, xlua 中把lua 中的对象映射成 C# 的接口的时候, 需要在这个接口定义上加上这个标记[CSharpCallLua], 同时也必须要有一个方法 来负责获取这个接口对象, 这个也是必须加上[CSharpCallLua], lua 中的table 无法直接通过lua.global.get 来直接获取并复制给C# 接口. 还有一点就是释放luaenv 的时候, 必须把所有的C# 通过lua 获得的方法, 也置为null 才可以

6, 还可以 把lua 中的table 直接映射成 C# 中的dictionary 或者是list , 但是这个就是table 里面的key value 有要求了.

7.  lua 中的多返回值的方法, 也是可以映射到C# 中的delegate方法的, 第一个返回值是C# 的返回值, 后面的, 就是delegate方法的out , ref 参数, 也是从左到右依次

8. lua 中创建Unity 的GameObject, 这样,   local obj = CS.UnityEngine.GameObject("name")   就好了, 

9, 在lua 中可以定义一些全局变量 记录C# 的东西, 然后在C# 中一开始的时候就把 这个值设置好, luaenv.global.set("self",this)  这样的话 lua中的代码就可以包含self, 可以通过self:method() 来调用C# 中self 这个对象的方法, 记住是: 分号, 如果用.show(self) 的话就必须把自身传进去, 因为C# 中非静态方法的第一个参数就是自己  获取或者修改C# 对象的属性则仍然是用. .  点..  

10. 如果lua 要调用C# 的静态方法的话, 例如Hello.cs 这个类, 那么直接CS.Hello.Show() 就可以了.

11. 重载也是没有问题的

12. C# 类中的枚举, 也可以在lua 中赋值,    还可以用数字给枚举赋值, 通过这样,   CS.Hello.Week.__CastFrom(1) 这样就把1 转成枚举了.

13, 可以给C# 类中的事件, 在lua中增加回调函数, 如下  self:showmtd("+",show), 其中showmtd 是定义在 C# 类中的public event Show showmtd;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值