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