tolua git地址 這里面也有一些說(shuō)明
在開(kāi)始需要實(shí)例出一個(gè)LuaState的對(duì),對(duì)應(yīng)的構(gòu)造方法中就是初始化加載lua組件格郁。然后調(diào)用Start方法展箱。
直接在cs中編寫(xiě)lua旨枯,使用LuaState中的DoString方法。
LuaState.DoFile("Lua文件名")這里只需要設(shè)置文件名析藕,在這之前需要設(shè)置搜索文件路徑召廷,也就是用LuaState.AddSearchPath("路徑")把文件對(duì)應(yīng)的路徑添加進(jìn)去凳厢。
LuaState.GetFunction("指定方法")調(diào)用lua中的方法。
cs調(diào)用lua中的變量直接使用LuaState["變量名"]竞慢,設(shè)置這個(gè)變量值需要在加載lua文件之前設(shè)置先紫,獲得lua文件中的變量是在加載之后。
這里面的Coroutine協(xié)同程序中的coroutine.wait筹煮,需要先對(duì)LuaLooper中的luaState進(jìn)行賦值遮精,當(dāng)然這個(gè)LuaLooper也是需要添加到游戲物體上的。在LuaClent中有對(duì)LuaLooper初始化封裝的方法败潦,在游戲加載時(shí)直接調(diào)用即可本冲。
LuaLooper會(huì)在c#每一幀驅(qū)動(dòng)lua的協(xié)同完成所有的協(xié)同功能,這里的協(xié)同已經(jīng)不單單是lua自身功能劫扒,而是tolua#模擬unity的所有的功能檬洞。
這里也好像可以在lua中用unity中的協(xié)同,但是需要做一些初始化沟饥,使用LuaClient來(lái)初始化即可添怔。
cs中調(diào)用lua中方法傳入值使用Function.Push(傳入值)
lua中使用迭代,array:GetEnumerator與array:MoveNext贤旷,這里是用的的冒號(hào)广料,數(shù)組轉(zhuǎn)化成table使用的array:ToTable
lua中使用cs傳入的字典,使用迭代遍歷幼驶,跟數(shù)組一樣艾杏。
lua中使用cs中的枚舉,使用枚舉.ToInt()轉(zhuǎn)化為int來(lái)作比較盅藻。也可以使用枚舉.IntToEnum(數(shù)字)來(lái)轉(zhuǎn)化為枚舉购桑。當(dāng)然這里如果需要用自己定義的枚舉,需要生成相應(yīng)的Wrap文件才可以使用氏淑。
在lua中使用cs中委托其兴,需要生成相應(yīng)聲明委托的Wrap文件,然后就可以調(diào)用了夸政。按鍵的事件可以用這個(gè)元旬。
Lua訪(fǎng)問(wèn)GameObject,新建local go = GameObject('go')守问,使用AddComponent值得注意的是使用冒號(hào)匀归。
Lua中訪(fǎng)問(wèn)cs中帶out的函數(shù),比如射線(xiàn)碰撞的調(diào)用方式耗帕,在lua中需要out的參數(shù)直接填寫(xiě)nil參數(shù)穆端,然后它會(huì)在返回值hit中返回就是out參數(shù)了。
lua中解析json需要require "cjson"仿便,然后直接使用json.decode(json字符串)
lua中使用list体啰,其中使用list的方法都是使用的冒號(hào)攒巍。