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 脚本时用 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

×

喜欢就点赞,疼爱就打赏