? ? ? 最近需要了解下Unity下使用lua的一些性能消耗,同事已經(jīng)對(duì)這方面有所研究,然后我們自己也需要先了解一下,鑒于對(duì)SLua的不熟,所以還是先了解一下SLua,大體先看了下SLua的源碼,然而不太會(huì)用,就又網(wǎng)上搜索了下SLua的使用,那先來個(gè)傳送門吧http://www.lxweimin.com/p/2dc2b816f1a4。就一步一步的照著這哥的步驟來弄,期間遇到的一些坑,或者說是自己不了解的問題記錄如下:
一、打開unity工程之后報(bào)錯(cuò),無非就是一些C#的報(bào)錯(cuò)如下Assets/Slua/example/test/App.cs(16,29): error CS0117: `System.IO.File' does not contain a definition for `ReadAllBytes'本人也是C#的菜鳥,沒有正統(tǒng)的學(xué)習(xí)過C#,原因很簡單,切換下平臺(tái)吧,切換到PC,或者Android平臺(tái)即可
二、對(duì)于自定義C#對(duì)象在Lua中的使用問題,原因可能是我使用的版本和上述作者版本不一樣吧,我的是最新的1.2.0版。如果lua中需要獲取返回值并且返回值可用,那么C#函數(shù)的返回值則必須是>=2,不然其返回值就是nil了,以以下函數(shù)為例
[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
同事因?yàn)橛玫搅俗远x的C#對(duì)象,所以我們需要初始化LuaState狀態(tài)機(jī)與C#的轉(zhuǎn)換對(duì)象而老版本的BindCustom.Bind (L);已經(jīng)不存在了替而代之的是接口BindCustom.GetBindList()因此我們需要如此執(zhí)行代碼
var list = BindCustom.GetBindList();? ? ? ?
foreach (Actioni in list)
{
? ? ? ?i.Invoke(ls.handle);
}
執(zhí)行完上述代碼后,我們就可以安然無恙的執(zhí)行我們的lua代碼啦,
LuaFunction testHuman = ls.getFunction("testHuman");
testHuman.call();
沒用過簡書,不會(huì)插入代碼(V^V).