(XLua)C#與Lua中的交互
2017.10.10 14:25* 字數 999 閱讀 570評論 0喜歡 0
XLua下載地址:https://github.com/Tencent/xLua
Paste_Image.png
下載後接下來就是導入XLua到unity裏了,解析出來的XLua有下面幾個文件夾
Paste_Image.png
我們只需要將Assests:主目錄裏面的東西全部導入到Unity裏面就OK了,導入後再XLua的文件夾下有這麼幾個。裏面都有學習的文檔,也可自行去學。
Paste_Image.png
C#訪問Lua中的全局變量與table
首先創建一個在Resources下面創建一個文本文件並給其命名爲Hello world.lua.txt,這樣我們就可以讀取到Lua文本文件了,然後寫入以下
接着我們創建一個腳本HolloworldXLua引入程序集XLua在Start方法下寫入
一個LuaEnv實例對應Lua虛擬機,出於開銷的考慮,建議全局唯一
DoString參數爲String,可輸入任意合法的Lua代碼.
在這裏訪問Lua中的Table有幾種方法一種是映射到類中,另一種是映射到接口中去,但是這兩種方法結果都是相同但是,有一點是不一樣的,那就是映射到類中只拷貝Lua裏面的數據但是用接口映射的話可以修改Lua裏面的數據.,用接口相當與引用
然後我們就可以看到輸出的結果,輸出的就是Lua腳本里面的全局變量與裏面的table裏面的
Paste_Image.png
然後還可以通過Dictionary或者List去映射Lua表裏面的數據
輸出結果:
Paste_Image.png
下面使用List也可以映射那些沒有Key的值,
Lua腳本里面
C#腳本里面
最後輸出可以看到2輸出兩次212和15分別輸出一次對應Lua腳本里面的數據:
Paste_Image.png
還有一種訪問Tab的方式就是使用LuaTable,這種方式不推薦使用,性能比較慢,我推薦使用第二種方式通過去創建Intaface去映射Lua中的Table。
訪問一個全局的Function
首先Lua腳本里面寫入函數方法,一個有多個返回值有參數的方法
那麼在C#中如何去調用呢下面來看看,因爲我們在C#中只能有一個返回值而在Lua中可以有多個返回值,那麼在C#返回值的時候只能返回第一個值,而Lua後面的返回值可以在C#中用out或者ref去接收後面的返回值
輸出結果,前面兩個是Lua裏面輸出的,後面是C#裏面輸出的,這樣就輕鬆調用了Lua裏面的方法了
Paste_Image.png
還有一種方式就是使用Lua自帶的LuaFction,和上面LuaTable使用一樣比較耗費性能,但是使用簡單所以這裏也不推薦使用
添加自定義Load的方法
如果我們的Lua文本不想放在Resource裏面加載想放到其他地方加載怎麼辦呢,Xlua也提供了自定義的Load方法,比如我們想把我們的Lua腳本放在StreamingAssets文件夾下面,那麼該如何做呢,首先先在Unity裏面創建一個StreamingAssets文件夾,然後把我們的Lua腳本放在StreamingAssets文件夾下,創建一個腳本CreateLoade,寫入代碼
然後我們在Unity裏面運行起來看結果,輸出了Lua腳本里輸出的結果。這樣就沒問題了.
Paste_Image.png
在Lua中構造Unity裏面遊戲物體並且查找遊戲對象獲取相應組件
在Lua腳本中寫入
這時候C#中構造虛擬機運行的時候就會在Unity裏面構造一個空的遊戲物體,運行後會生成一個名爲NewByLua的空遊戲物體,並且會查找到Directional Light並修改名爲爲UpdataLight,並移除了裏面的Light組件
Paste_Image.png