1,Githup上下載下傳Xlua架構;
2,解壓,将Assets檔案夾下的檔案複制在工程中
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31EMJRUT1kleNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5MTM5ITMzADM4EDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
預設可以在生命周期函數OnDisAble中釋放虛拟機。
第一種加載Lua文本方式《建立lua字尾為: .lua.txt》
第二種執行lua文本的方式《require會自動查找Resources檔案下名字為lua1的檔案》
第三種自定義加載路徑《項目用的比較多》
擷取lua腳本中的變量;
C#擷取lua的Table表
通過映射的方式通路
lua Table表中有Key的值可以擷取到
1擷取lua表中的值
定義一個普通類
調的方式
2調用c#的方法
可以修改lua中的值,利用這個接口;
lua腳本的表裡面方法想被C#調用加上arg。
通過指派這個接口,可以點出來這個方法,執行的就是lua中表中的eat方法;
3Lua表中有無Key值周遊方式
在C#中
通過Dircionnary周遊<key的類型,value的類型>
隻能周遊出有Key值的
4通過List周遊<value的類型>
隻能周遊出沒有Key類型的
5通過luaTable類調用《不建議使用,比較消耗資源》
C#調用lua中函數
eg lua中存在這樣一個函數
1通過Action類調用無參函數,引入Using System,在執行後,将act1設定為null;
2通過Action類調用有參函數
需要先在C#中寫一個委托,打上标簽,參數類型,傳回值要和lua一緻
将add指派給委托。
2.1另一種是有傳回值的,修改委托改成同樣的傳回值類型,執行方法。
當lua傳回多個傳回值
利用ref out
同理寫出委托
利用out,執行該方法
lua腳本擷取Unity的物體的元件,并删除。
xlua配置環境:
1正常導入Xlua插件<Assets目錄下複制>
2Assets同級别的Tools複制
3工程BuildingSetting設定-Inspectors面闆在OtherSettings中填寫熱更新标簽。
4頂部欄如下:
5去Unity安裝路徑尋找3個Dll檔案
把複制檔案放在工程的Assets/Xlua/Src/Editor下
執行前清除,尋找相關代碼,打标簽(213)。
運作案例8點選Hotfit出錯說明沒有配置成功
正确如下:
熱更新修改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代碼:如下
這樣熱更新會實作,但關閉遊戲會報錯,因為沒有把熱更新的函數置為空。
建立一個lua腳本
将熱更新的CS腳本GameMangager類InitGame方法置為nil。
在C#中執行銷毀的lua腳本