天天看點

Xlua與Unity的相關加互動

1,Githup上下載下傳Xlua架構;

2,解壓,将Assets檔案夾下的檔案複制在工程中

Xlua與Unity的相關加互動

預設可以在生命周期函數OnDisAble中釋放虛拟機。

第一種加載Lua文本方式《建立lua字尾為: .lua.txt》

Xlua與Unity的相關加互動

第二種執行lua文本的方式《require會自動查找Resources檔案下名字為lua1的檔案》

第三種自定義加載路徑《項目用的比較多》

Xlua與Unity的相關加互動

擷取lua腳本中的變量;

Xlua與Unity的相關加互動

C#擷取lua的Table表

通過映射的方式通路

lua Table表中有Key的值可以擷取到

1擷取lua表中的值

定義一個普通類

Xlua與Unity的相關加互動

調的方式

Xlua與Unity的相關加互動

2調用c#的方法

可以修改lua中的值,利用這個接口;

Xlua與Unity的相關加互動

lua腳本的表裡面方法想被C#調用加上arg。

Xlua與Unity的相關加互動

通過指派這個接口,可以點出來這個方法,執行的就是lua中表中的eat方法;

Xlua與Unity的相關加互動

3Lua表中有無Key值周遊方式

在C#中

通過Dircionnary周遊<key的類型,value的類型>

隻能周遊出有Key值的

Xlua與Unity的相關加互動

4通過List周遊<value的類型>

隻能周遊出沒有Key類型的

Xlua與Unity的相關加互動

5通過luaTable類調用《不建議使用,比較消耗資源》

Xlua與Unity的相關加互動

C#調用lua中函數

eg lua中存在這樣一個函數

Xlua與Unity的相關加互動

1通過Action類調用無參函數,引入Using System,在執行後,将act1設定為null;

Xlua與Unity的相關加互動

2通過Action類調用有參函數

需要先在C#中寫一個委托,打上标簽,參數類型,傳回值要和lua一緻

Xlua與Unity的相關加互動

将add指派給委托。

Xlua與Unity的相關加互動

2.1另一種是有傳回值的,修改委托改成同樣的傳回值類型,執行方法。

當lua傳回多個傳回值

Xlua與Unity的相關加互動

利用ref out

同理寫出委托

Xlua與Unity的相關加互動

利用out,執行該方法

Xlua與Unity的相關加互動

lua腳本擷取Unity的物體的元件,并删除。

Xlua與Unity的相關加互動

xlua配置環境:

1正常導入Xlua插件<Assets目錄下複制>

2Assets同級别的Tools複制

3工程BuildingSetting設定-Inspectors面闆在OtherSettings中填寫熱更新标簽。

Xlua與Unity的相關加互動

4頂部欄如下:

Xlua與Unity的相關加互動

5去Unity安裝路徑尋找3個Dll檔案

Xlua與Unity的相關加互動

把複制檔案放在工程的Assets/Xlua/Src/Editor下

Xlua與Unity的相關加互動

執行前清除,尋找相關代碼,打标簽(213)。

Xlua與Unity的相關加互動

運作案例8點選Hotfit出錯說明沒有配置成功

正确如下:

Xlua與Unity的相關加互動

熱更新修改c#的方法流程:

引入命名空間 Using Xlua

在需要修改的類前打上标簽[Hotfit]

在函數前打上标簽[LuaCallCSharp]

建立lua環境,設定預設加載路徑

通過lua腳本修改C#的函數。

EG:

修改C#中的一個函數 <修改c#腳本運作前需要重新清除,關聯,打标簽>

Using UnityEngine;
Using XLua;
Using Systerm.IO;
//部分類名不寫
//聲明虛拟機
private LuaEnv luaenv=new LuaEnv();
//在Awake中修改預設加載路徑
void Awake()
{
luaenv.AddLoager(MyLoader);
//執行lua腳本的名字fishdemo。
//名字在項目中是固定的。
luaenv.DoString("require 'fishluademo'")
}
private byte [] MyLoader(ref string filepath)
{//這裡預設是伺服器網址,暫用本地儲存調試
string abspath="C:/Uscrs/Kjxy/Desjtop/Fishdemo"+"/"filepath"+".lua.txt";
//用UTF8原因是可以識别中文路徑。
 return System.Text.Encoding.UTF8.GetBytes(File.ReafAllText(abspath));   
}
//當銷毀時釋放虛拟機
private void OnDestory()
{
    luaenv.Dispose();
}
           

對應的lua代碼:如下

Xlua與Unity的相關加互動

這樣熱更新會實作,但關閉遊戲會報錯,因為沒有把熱更新的函數置為空。

建立一個lua腳本

将熱更新的CS腳本GameMangager類InitGame方法置為nil。

Xlua與Unity的相關加互動

在C#中執行銷毀的lua腳本

Xlua與Unity的相關加互動

繼續閱讀