(XLua)C#與Lua中的交互

(XLua)C#與Lua中的交互

96 _涼笙 關注

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章