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脚本 用到的Lua知识点多脚本执行 require
默认寻找脚本的路径 是在 Resources下 并且 因为在这里
底层是通过 Resources.Load去加载Lua脚本 txt bytes等等
所以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解析器调用的多脚本
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脚本 Lua知识点 :多脚本执行 require
//默认寻找脚本的路径 是在 Resources下 并且 因为在这里
//估计是通过 Resources.Load去加载Lua脚本 txt bytes等等
//所以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