3.Lua解析器执行Lua脚本

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

×

喜欢就点赞,疼爱就打赏