3.CSharp调用Lua-Lua解析器
3.1 知识点
创建Lua解析器
- LuaEnv类代表Lua解析器
- 往Lua解析器传入Lua代码 能够让我们在Unity中执行Lua
- 一般情况下 保持Lua解析器的唯一性
LuaEnv luaEnv = new LuaEnv();
使用Lua解析器执行Lua脚本
LuaEnv.DoString 执行Lua字符串
//LuaEnv中DoString方法 第一个参数用双引号包裹传入要执行的Lua语句 可以传入第二个参数代表传入要执行的Lua语句如果报错找到哪个c#脚本
luaEnv.DoString("print('你好世界')");//c#脚本挂载到对象后正常打印
//luaEnv.DoString("print('你好世界)", "Lesson03_CSharp调用Lua_Lua解析器");//故意写的报错代码 会有如下报错
//LuaException: [string "Lesson03_CSharp调用Lua_Lua解析器"]:1: unfinished string near<eof>
//XLua.LuaEnv.ThrowExceptionFromError (System.Int32 oldTop) (at Assets/ XLua / Src / LuaEnv.cs:441)
//XLua.LuaEnv.DoString(System.Byte[] chunk, System.String chunkName, XLua.LuaTable env)(at Assets / XLua / Src / LuaEnv.cs:277)
//XLua.LuaEnv.DoString(System.String chunk, System.String chunkName, XLua.LuaTable env)(at Assets / XLua / Src / LuaEnv.cs:288)
//Lesson03_CSharp调用Lua_Lua解析器.Start()(at Assets / xLua教程 / Lesson03_CSharp调用Lua_Lua解析器 / Lesson03_CSharp调用Lua_Lua解析器.cs:23)
luaEnv.DoString+require 执行Lua脚本
在 Resources 下创建一个 Lua 脚本,写一条简单的打印信息。
print('我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器')

执行 Lua 脚本时用 require 做多脚本串联。默认从 Resources 加载,底层是 Resources.Load(如 txt、bytes)。因此 Resources 内脚本一般命名为 *.lua.txt。自定义路径在后续课通过 AddLoader 完成。
//我们可以利用我们学习的Lua多脚本执行 在LuaEnv中DoString方法传入 require('脚本名') 执行Lua脚本
//Lua解析器默认寻找脚本的路径 是在Resources下
//由于 Resources.Load 加载时不支持纯 .lua 后缀,故放在 Resources 下的脚本通常命名为 脚本名.lua.txt
//之后会学习如何自定义 lua 文件路径
luaEnv.DoString("require('Lesson03_CSharp调用Lua_Lua解析器')");//我是 Lua 解析器调用的多脚本

Lua解析器的垃圾回收和销毁
LuaEnv.Tick 执行Lua垃圾回收
//LuaEnv中Tick方法 执行Lua垃圾回收,清除不再需要的Lua对象
//这通常在每帧更新或切换场景时执行
luaEnv.Tick();
LuaEnv.Dispose 销毁Lua解析器释放资源
//LuaEnv中Dispose方法 销毁Lua解析器,释放资源
luaEnv.Dispose();
3.2 知识点代码
Lesson03_CSharp调用Lua_Lua解析器.lua.txt
print('我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器')
Lesson03_CSharp调用Lua_Lua解析器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class Lesson03_CSharp调用Lua_Lua解析器 : MonoBehaviour
{
void Start()
{
#region 知识点一 创建Lua解析器
//LuaEnv类代表Lua解析器
//往Lua解析器传入Lua代码 能够让我们在Unity中执行Lua
//一般情况下 保持Lua解析器的唯一性
LuaEnv luaEnv = new LuaEnv();
#endregion
#region 知识点二 使用Lua解析器执行Lua脚本
//LuaEnv中DoString方法 第一个参数用双引号包裹传入要执行的Lua语句 可以传入第二个参数代表传入要执行的Lua语句如果报错找到哪个c#脚本
luaEnv.DoString("print('你好世界')");//c#脚本挂载到对象后正常打印
//luaEnv.DoString("print('你好世界)", "Lesson03_CSharp调用Lua_Lua解析器");//故意写的报错代码 会有如下报错
//LuaException: [string "Lesson03_CSharp调用Lua_Lua解析器"]:1: unfinished string near<eof>
//XLua.LuaEnv.ThrowExceptionFromError (System.Int32 oldTop) (at Assets/ XLua / Src / LuaEnv.cs:441)
//XLua.LuaEnv.DoString(System.Byte[] chunk, System.String chunkName, XLua.LuaTable env)(at Assets / XLua / Src / LuaEnv.cs:277)
//XLua.LuaEnv.DoString(System.String chunk, System.String chunkName, XLua.LuaTable env)(at Assets / XLua / Src / LuaEnv.cs:288)
//Lesson03_CSharp调用Lua_Lua解析器.Start()(at Assets / xLua教程 / Lesson03_CSharp调用Lua_Lua解析器 / Lesson03_CSharp调用Lua_Lua解析器.cs:23)
//执行 Lua 多脚本:require
//默认从 Resources 加载,底层为 Resources.Load(txt、bytes 等)
//故 Resources 下脚本命名为 脚本名.lua.txt
//之后会学习自定义 lua 路径
//我们可以利用我们学习的Lua多脚本执行 在LuaEnv中DoString方法传入 require('脚本名') 执行Lua脚本
//Lua解析器默认寻找脚本的路径 是在Resources下
//由于Resources.Load加载时不支持lua格式 所以放在Resources下的脚本要使用 脚本名.lua.txt 这样的后缀
//之后会学习如何自定义lua文件路径
luaEnv.DoString("require('Lesson03_CSharp调用Lua_Lua解析器')");//我是Lua解析器调用的多脚本
#endregion
#region 知识点三 Lua解析器的垃圾回收和销毁
//LuaEnv中Tick方法 执行Lua垃圾回收,清除不再需要的Lua对象
//这通常在每帧更新或切换场景时执行
luaEnv.Tick();
//LuaEnv中Dispose方法 销毁Lua解析器,释放资源
luaEnv.Dispose();
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com