XLua C 與Lua中的互動

2021-08-28 20:42:07 字數 2472 閱讀 5760

_涼笙 關注

我們只需要將assests:主目錄裡面的東西全部匯入到unity裡面就ok了,匯入後再xlua的資料夾下有這麼幾個。裡面都有學習的文件,也可自行去學。

c#訪問lua中的全域性變數與table

首先建立乙個在resources下面建立乙個文字檔案並給其命名為hello world.lua.txt,這樣我們就可以讀取到lua文字檔案了,然後寫入以下

接著我們建立乙個指令碼holloworldxlua引入程式集xlua在start方法下寫入

乙個luaenv例項對應lua虛擬機器,出於開銷的考慮,建議全域性唯一

dostring引數為string,可輸入任意合法的lua**.

在這裡訪問lua中的table有幾種方法一種是對映到類中,另一種是對映到介面中去,但是這兩種方法結果都是相同但是,有一點是不一樣的,那就是對映到類中只拷貝lua裡面的資料但是用介面對映的話可以修改lua裡面的資料.,用介面相當與引用

然後我們就可以看到輸出的結果,輸出的就是lua指令碼裡面的全域性變數與裡面的table裡面的

然後還可以通過dictionary或者list去對映lua表裡面的資料

輸出結果:

下面使用list也可以對映那些沒有key的值,

lua指令碼裡面

c#指令碼裡面

最後輸出可以看到2輸出兩次212和15分別輸出一次對應lua指令碼裡面的資料:

還有一種訪問tab的方式就是使用luatable,這種方式不推薦使用,效能比較慢,我推薦使用第二種方式通過去建立intaface去對映lua中的table。

訪問乙個全域性的function

首先lua指令碼裡面寫入函式方法,乙個有多個返回值有引數的方法

那麼在c#中如何去呼叫呢下面來看看,因為我們在c#中只能有乙個返回值而在lua中可以有多個返回值,那麼在c#返回值的時候只能返回第乙個值,而lua後面的返回值可以在c#中用out或者ref去接收後面的返回值

輸出結果,前面兩個是lua裡面輸出的,後面是c#裡面輸出的,這樣就輕鬆呼叫了lua裡面的方法了

還有一種方式就是使用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元件

xLua C 訪問lua中的全域性function

這種是建議的方式,效能好很多,而且型別安全。缺點是要生成 如果沒生成 會拋invalidcastexception異常 delegate要怎樣宣告呢?對於function的每個引數就宣告乙個輸入型別的引數。多返回值要怎麼處理?從左往右對映到c 的輸出引數,輸出引數包括返回值,out引數,ref引數。...

XLua C 訪問Lua中的table的幾種方式

c 訪問lua中的全域性變數 c luaenv new luaenv luaenv.dostring require csharpcalllua 獲取lua中的全域性變數 string name luaenv.global.get name print name name int hp luaenv...

xLua C 訪問Lua之訪問Lua的變數

在resources資料夾中新建乙個csharpcalllua.lua.txt檔案,定義幾個變數 i 10 str wwz isstu false void start lua的number型別對於c 的int,float,double的,如果型別不對,會返回0比如在lua中i 10.1,c 中in...