网上的案例大部分是官方的案例,个人的案例还是比较少的。我这个案例比较通俗易懂
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控件上。
然后执行就可以了