Unity中调用LUA:
优先导入tolua资源包,只能是5.6.5以上版本。
LuaState lua = new LuaState() 定义并创建一个LUA脚本的虚拟机
LuaState.Start() 开启虚拟机
LuaState.AddSearchPath(string) 传入一个路径添加路径下的LUA脚本但不执行,调用DoFile或Reqire后直接传入脚本名.lua执行(二者有别)
LuaState.DoFile(string) 参数为LUA脚本的路径,将路径下的内容导入并保存近变量中(从盘到.lua)
LuaState.Reqire(string)参数为路径,效果与DoFile相同,区别是第二次调用时会返回第一次创建的LUA对象
LuaState.DoString(string,string) 传入两个参数,第一个参数是脚本中的语句,可以自己编写,大多数情况用IO导入LUA文件中的内容,第二个参数代表名字,可以任意起名,不传入第二个参数时名字为默认
LuaState[string] 通过索引找到变量的名字并返回LUA脚本中的变量(可以找到表中的变量,可以通过传入LUA中没有的变量并赋值当做创建)
LuaFunction luaFunc = LuaState.GetFinction(string) 获取LUA脚本中的一个方法并赋值给变量(这个方法同样适用于获得表中的方法,传入参数的方式为"表.方法")
luaFunc.Call() 执行保存于自身的无参数无返回值的方法
返回类型 a = luaFunc.Invoke<参数一类型,参数二类型,返回值类型>(参数一内容,参数二内容) 执行LunFunc代表的函数,泛型的前几个参数为方法需要的参数的类型,最后一个值为返回值类型,括号中为参数的具体值
------------------------------------
以下三个方法用于自己写执行方法时
func.BeginPCall();
func.Push(需要的参数);
func.PCall();
int = func.CheckNumber(); 获取返回值中的int
string = func.CheckString(); 获取返回值的string
bool = func.CheckBoolean(); 获取返回值中的bool
func.EndPCall();
------------------------------------
LuaTable table = LuaState.GetTable(string) 参数为表的名字,返回一个LUA中保存的表
LuaTable[int或string] 可以传入索引来获取索引位置的值,或者传入string来获得变量,也可以传入没有的变量来创建。
LuaTable table = LuaTable.AddTable(string) 在表中添加一个新表并获得,参数为表的名字
LuaBinder.Bind(LuaState);注册,使LUA中可以调用Unity方法
looper=gameObject.AddComponent<LuaLooper>();
looper.luaState = LuaState;
用Unity模拟LUA协同程序,调用这三句逻辑并执行开启协程的方法.(先创建和Start,然后加入这个,然后再用DoString或DoFile)
执行LUA自身的协程时,需要一个方法来开启协程并返回一个包含该协程的变量
LuaThread = LuaFunction.Invoke<LuaThrad>();
执行协程并获取方法返回的协程变量对他进行操作
LuaThread.Resume(10);等待10秒(毫秒?)
LuaThread.Dispose() 销毁协同
LuaThread = null 回收垃圾
LuaTable.Dispose () 销毁表
LuaTable = null 回收垃圾
LuaFunction.Dispose()销毁创建的方法
LuaFunction = null 回收垃圾
LuaState.Collect() 清空资源方法之一
LuaState.CheckTop() 清理栈空间
LuaState.Dispose() 清理内存空间
LuaState = null 等待自动清理垃圾
PS:以上三个需要同时写在代码末尾,因为LUA无法自动释放空间