C#的ugui與XLua整合的案例
阿新 • • 發佈:2020-06-04
網上的案例大部分是官方的案例,個人的案例還是比較少的。我這個案例比較通俗易懂
unity需要的控制元件有兩個:一個是button和input
C#程式碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; using UnityEngine.UI; using System; public class LuaDemoScript : MonoBehaviour { public TextAsset textAsset; public CMyClass[] lists;private LuaTable runTable; internal static LuaEnv luaEnv = new LuaEnv(); //初始化lua的載入器 public void Awake() { runTable = luaEnv.NewTable(); //普通表 LuaTable metaTable = luaEnv.NewTable(); //元表 metaTable.Set("__index",luaEnv.Global); //把元方法放入元表裡面 runTable.SetMetaTable(metaTable); //把元表放入普通表 metaTable.Dispose(); //銷燬元表 runTable.Set("self",this); //把當前物件的指標傳給普通表。方便在XLua裡面用 for(int i = 0;i < lists.Length; i++) //迴圈控制元件。賦值給表 { runTable.Set(lists[i].name,lists[i].go); } luaEnv.DoString(textAsset.text,"LuaDemo.lua",runTable); } }
//該類主要是儲存控制元件資訊的 [Serializable] public class CMyClass {public string name; public GameObject go; }
XLua指令碼如下:
self:GetComponent("Button").onClick:AddListener( function() local t = loginname:GetComponent("InputField") local val = t.text if val == "" then print("值不能為空") else print(val) end end )
注意:如果把XLua指令碼放入Unity專案中,是不能以lua作為字尾名的,而是以txt為字尾。如果lua指令碼檔案中有中文的話需要在檔案中轉換成unf-8格式
C#指令碼放在button控制元件上。
然後執行就可以了