第一次使用SLua

      最近需要了解下Unity下使用lua的一些性能消耗,同事已经对这方面有所研究,然后我们自己也需要先了解一下,鉴于对SLua的不熟,所以还是先了解一下SLua,大体先看了下SLua的源码,然而不太会用,就又网上搜索了下SLua的使用,那先来个传送门吧http://www.jianshu.com/p/2dc2b816f1a4。就一步一步的照着这哥的步骤来弄,期间遇到的一些坑,或者说是自己不了解的问题记录如下:

一、打开unity工程之后报错,无非就是一些C#的报错如下Assets/Slua/example/test/App.cs(16,29): error CS0117: `System.IO.File' does not contain a definition for `ReadAllBytes'本人也是C#的菜鸟,没有正统的学习过C#,原因很简单,切换下平台吧,切换到PC,或者Android平台即可

二、对于自定义C#对象在Lua中的使用问题,原因可能是我使用的版本和上述作者版本不一样吧,我的是最新的1.2.0版。如果lua中需要获取返回值并且返回值可用,那么C#函数的返回值则必须是>=2,不然其返回值就是nil了,以以下函数为例

[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]

[StaticExport]

public static int CreateHuMan(IntPtr L)

{

        LuaObject.pushValue(L, true);//这行代码必不可少 参考了下SLua中example下的Test

        CHuMan item = new CHuMan();

        LuaObject.pushObject(L, item);

        return 2;

}

以下是lua代码

function testHuman()

       local human = CHuMan.CreateHuMan()

       human.Age = 99

       human.Name = "哈哈我长命快百岁了"

       print(human.Age,human.Name)

end

同事因为用到了自定义的C#对象,所以我们需要初始化LuaState状态机与C#的转换对象而老版本的BindCustom.Bind (L);已经不存在了替而代之的是接口BindCustom.GetBindList()因此我们需要如此执行代码

var list = BindCustom.GetBindList();       

foreach (Actioni in list)

{

       i.Invoke(ls.handle);

}

执行完上述代码后,我们就可以安然无恙的执行我们的lua代码啦,

LuaFunction testHuman = ls.getFunction("testHuman");

testHuman.call();

没用过,不会插入代码(V^V).

你可能感兴趣的:(第一次使用SLua)