第一次使用SLua

? ? ? 最近需要了解下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).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容