3.CSharp调用Lua-Lua解析器
3.1 知识点
创建Lua解析器
- LuaState类代表Lua解析器
- 往Lua解析器传入Lua代码 能够让我们在Unity中执行Lua
- 一般情况下 保持Lua解析器的唯一性
// 初始化一个 解析器(虚拟机)
LuaState luaState = new LuaState();
// toLua想要使用Lua解析器必须要 启动解析器(虚拟机)
luaState.Start();
使用Lua解析器执行Lua脚本
LuaState.DoString 执行Lua字符串
// LuaState类的DoString方法 第一个参数用双引号包裹传入要执行的Lua语句
// 可以传入第二个参数代表传入要执行的Lua语句如果报错找到哪个c#脚本
luaState.DoString("print('你好世界')");//c#脚本挂载到对象后正常打印
// luaState.DoString("print('你好世界)", "Lesson03_CSharp调用Lua_Lua解析器");//故意写的报错代码 会有如下报错
// LuaException: [string "Lesson03_CSharp调用Lua_Lua解析器"]:1: unfinished string near '<eof>'
// LuaInterface.LuaState:LuaLoadBuffer(Byte[], String)(at Assets / ToLua / Core / LuaState.cs:2187)
// LuaInterface.LuaState:DoString(String, String)(at Assets / ToLua / Core / LuaState.cs:599)
// Lesson03_CSharp调用Lua_Lua解析器: Start()(at Assets / toLua教程 / Lesson03_CSharp调用Lua_Lua解析器 / Lesson03_CSharp调用Lua_Lua解析器.cs:33)
创建Lua脚本
- 在Assets一级子目录下创建Lua文件夹 添加lua脚本 注意后缀要是.lua 不要是.txt
print('我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器')
LuaState.DoFile 执行Lua文件
// LuaState类的DoFile方法 执行Lua脚本 默认会去Assets一级子目录下找Lua文件夹下的lua脚本
// 传入lua脚本名参数时.lua后缀可加可不加
luaState.DoFile("Lesson03_CSharp调用Lua_Lua解析器.lua");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
// 多次执行DoFile 每次都会启动lua脚本
luaState.DoFile("Lesson03_CSharp调用Lua_Lua解析器.lua");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
LuaState.Require 执行Lua文件
// LuaState类的Require方法 执行Lua脚本 默认会去Assets一级子目录下找Lua文件夹下的lua脚本
// 不需要加.lua后缀 否则报错
luaState.Require("Lesson03_CSharp调用Lua_Lua解析器");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
// 多次执行Require 只会在第一次Require时启动
luaState.Require("Lesson03_CSharp调用Lua_Lua解析器");//没有效果
Lua解析器销毁
- 检查解析器栈顶是否为空 销毁前必须执行
- 销毁解析器
- 置空 防止空指针
luaState.CheckTop(); // 检查解析器 栈顶是否为空 销毁前必须执行
luaState.Dispose(); // 销毁解析器
luaState = null; // 置空 防止空指针
3.2 知识点代码
Lesson03_CSharp调用Lua_Lua解析器.lua
print('我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器')
Lesson03_CSharp调用Lua_Lua解析器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface;
public class Lesson03_CSharp调用Lua_Lua解析器 : MonoBehaviour
{
void Start()
{
#region 知识点一 创建Lua解析器并启动
//LuaState类代表Lua解析器
//往Lua解析器传入Lua代码 能够让我们在Unity中执行Lua
//一般情况下 保持Lua解析器的唯一性
//初始化一个 解析器(虚拟机)
LuaState luaState = new LuaState();
//toLua想要使用Lua解析器必须要 启动解析器(虚拟机)
luaState.Start();
#endregion
#region 知识点二 使用Lua解析器执行Lua脚本
//LuaState类的DoString方法 第一个参数用双引号包裹传入要执行的Lua语句 可以传入第二个参数代表传入要执行的Lua语句如果报错找到哪个c#脚本
luaState.DoString("print('你好世界')");//c#脚本挂载到对象后正常打印
//luaState.DoString("print('你好世界)", "Lesson03_CSharp调用Lua_Lua解析器");//故意写的报错代码 会有如下报错
//LuaException: [string "Lesson03_CSharp调用Lua_Lua解析器"]:1: unfinished string near '<eof>'
//LuaInterface.LuaState:LuaLoadBuffer(Byte[], String)(at Assets / ToLua / Core / LuaState.cs:2187)
//LuaInterface.LuaState:DoString(String, String)(at Assets / ToLua / Core / LuaState.cs:599)
//Lesson03_CSharp调用Lua_Lua解析器: Start()(at Assets / toLua教程 / Lesson03_CSharp调用Lua_Lua解析器 / Lesson03_CSharp调用Lua_Lua解析器.cs:33)
//在Assets一级子目录下创建Lua文件夹 添加lua脚本 注意后缀要是.lua 不要是.txt
//LuaState类的DoFile方法 执行Lua脚本 默认会去Assets一级子目录下找Lua文件夹下的lua脚本 传入的参数 .lua后缀可加可不加
luaState.DoFile("Lesson03_CSharp调用Lua_Lua解析器.lua");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
//多次执行DoFile 每次都会启动lua脚本
luaState.DoFile("Lesson03_CSharp调用Lua_Lua解析器.lua");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
//LuaState类的Require方法 执行Lua脚本 默认会去Assets一级子目录下找Lua文件夹下的lua脚本 不需要加.lua后缀 否则报错
luaState.Require("Lesson03_CSharp调用Lua_Lua解析器");//我是Lua脚本 Lesson03_CSharp调用Lua_Lua解析器
//多次执行Require 只会在第一次Require时启动
luaState.Require("Lesson03_CSharp调用Lua_Lua解析器");//没有效果
#endregion
#region 知识点三 Lua解析器销毁
//检查解析器 栈顶是否为空 销毁前必须执行
luaState.CheckTop();
//销毁解析器
luaState.Dispose();
//置空 防止空指针
luaState = null;
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com