_涼笙 關注
我們只需要將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...