toLua学习

toLua学习
通用的过程
//开始
LuaState lua = new LuaState();
lua.Start();
--在这个位置插入lua的具体操作--
//结束
lua.CheckTop();
lua.Dispose();
lua = null;
1.第一个例子 DoString
lua.DoString("print("Hollo toLua.");")

2.第二个例子 DoFile 和 Require
string fullPath = Application.dataPath + "\ToLua/Examples/02_ScriptsFromFile";//找到lua文件的父目录
lua.AddSearchPath(fullPath); //增加lua文件的搜索目录
//DoFile的操作
lua.DoFile("脚本名.lua");
//Require的操作
lua.Require('脚本名(不需要带后缀名)');

3.第三个例子 回调lua的函数
lua脚本:
--start--
function luaFunc(num)
return num + 1
end
test = {}
test.luaFunc = luaFunc
--end--

//优先读取persistentDataPath/系统/Lua 目录下的文件(默认下载目录)
//未找到文件怎读取 Resources/Lua 目录下文件(仍没有使用LuaFileUtil读取)
new LuaResLoader();
lua.DoFile("上面的lua脚本");
//获取lua里面的func的方法
luaFunc=lua.GetFunction("test.luaFunc");
//调用lua里面的方法1
int num = luaFunc.Invoke<int, int>(123456);
//调用lua里面的方法2
int CallFunc()
{
luaFunc.BeginPCall();
luaFunc.Push(123456);
luaFunc.PCall();
int num = (int) luaFunc.CheckNumber();
luaFunc.EndPCall();
return num;
}
num = CallFunc();
//调用lua里面的方法3
DelegateFactory.Init();
Func<int, int> Func = luaFunc.ToDelegate<Func<int, int>>();
//调用lua里面的方法4
num = lua.Invoke<int, int>("test.luaFunc", 123456, true);

4.第四个例子

lua脚本:
--start--
print('Objs2Spawn is: '..Objs2Spawn)
var2read = 42
varTable = {1,2,3,4,5}
varTable.default = 1
varTable.map = {}
varTable.map.name = 'map'

meta = {name = 'meta'}
setmetatable(varTable, meta)

function TestFunc(strs)
print('get func by variable')
end
--end--

lua["Objs2Spawn"] = 5;//对应脚本里面的第一句
lua.DoFile(lua的脚本名);
Debugger.Log("Read var from lua: {0}", lua["var2read"]);//读取lua脚本里面的值

原文地址:https://www.cnblogs.com/kanekiken/p/7570778.html