4.CSharp调用Lua-Lua文件加载重定向
4.1 知识点
加载重定向方法
声明自定义加载路径函数
//自定义加载路径
private byte[] MyCustomLoader(ref string filePath)
{
}
初始化Lua解析器
// Lua解析器
LuaEnv luaEnv = new LuaEnv();
LuaEnv.AddLoader 自定义加载Lua文件路径 传入自定义加载路径函数
// Lua解析器中AddLoader方法 Lua文件加载重定向 其实就是自定义加载Lua文件路径
// AddLoader方法需要传入参数
// 参数是一个 参数是ref string filePath文件重定向路径 返回值是byte[]字节数组 的委托
luaEnv.AddLoader(MyCustomLoader);
自定义加载路径委托
filePath是require执行的lua脚本文件名
函数中要拼接lua脚本所在的路径并加上.lua后缀
判断路径是否存在,存在就返回字节数组
// 自定义加载路径
private byte[] MyCustomLoader(ref string filePath)
{
// 通过函数中的逻辑 去加载 Lua文件
// 参数filePath 是 require执行的 lua脚本文件名
// 我们需要拼接一个 lua脚本文件 所在路径 比如我们统一放在Asset下的LuaScripts文件夹下
// 注意要把lua脚本文件名名和.lua后缀也加上 因为不在Resources下 不需要.txt后缀了
string path = Application.dataPath + "/LuaScripts/" + filePath + ".lua";
Debug.Log(path);
// 判断lua脚本文件名所在的路径是否存在
if (File.Exists(path))
{
// 存在的话 从 所在的路径的lua脚本中 读取二进制数据 并将其以字节数组的形式返回
return File.ReadAllBytes(path);
}
else
{
// 不存在则读取失败
Debug.Log("MyCustomLoader重定向失败,文件名为" + filePath);
}
return null;
}
执行自定义路径下的Lua脚本
在Asset文件夹下的LuaScripts文件夹下创建Lua脚本
print('我是Lua脚本 Lesson04_CSharp调用Lua_Lua文件加载重定向')
当我们用Lua解析器执行Lua语言中的 require 时 相当于执行一个lua脚本
这个时候会执行luaEnv.AddLoader传入的委托 MyCustomLoader
在传入的委托中定义的自定义加载Lua文件路径逐个找是否有require的lua脚本 找到了就不会再找了
最终没有的话 会去默认的Resources文件夹找 还没有就报错找不到了
luaEnv.DoString("require('Lesson04_CSharp调用Lua_Lua文件加载重定向')");
之后 会学习去AB包中加载 lua文件
4.2 知识点代码
Lesson04_CSharp调用Lua_Lua文件加载重定向.lua
print('我是Lua脚本 Lesson04_CSharp调用Lua_Lua文件加载重定向')
Lesson04_CSharp调用Lua_Lua文件加载重定向
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
public class Lesson04_CSharp调用Lua_Lua文件加载重定向 : MonoBehaviour
{
void Start()
{
#region 知识点一 加载重定向方法
//Lua解析器
LuaEnv luaEnv = new LuaEnv();
//Lua解析器中AddLoader方法 Lua文件加载重定向 其实就是自定义加载Lua文件路径
//AddLoader方法需要传入参数
//参数是一个 参数是ref string filePath文件重定向路径 返回值是byte[]字节数组 的委托
luaEnv.AddLoader(MyCustomLoader);
//当我们用Lua解析器执行Lua语言中的 require 时 相当于执行一个lua脚本
//这个时候会执行AddLoader传入的委托 MyCustomLoader
//在传入的委托中定义的自定义加载Lua文件路径逐个找是否有require的lua脚本 找到了就不会再找了
//最终没有的话 会去默认的Resources文件夹找 还没有就报错找不到了
luaEnv.DoString("require('Lesson04_CSharp调用Lua_Lua文件加载重定向')");
//之后 会去AB包中加载 lua文件
#endregion
}
#region 知识点二 自定义加载路径委托
//自定义加载路径
private byte[] MyCustomLoader(ref string filePath)
{
//通过函数中的逻辑 去加载 Lua文件
//参数filePath 是 require执行的 lua脚本文件名 比如上面执行的Main
//我们需要拼接一个 lua脚本文件 所在路径 比如我们统一放在Asset下的LuaScripts文件夹下
//注意要把lua脚本文件名名和.lua后缀也加上 因为不在Resources下 不需要.txt后缀了
string path = Application.dataPath + "/LuaScripts/" + filePath + ".lua";
Debug.Log(path);
//判断lua脚本文件名所在的路径是否存在
if (File.Exists(path))
{
//存在的话 从 所在的路径的lua脚本中 读取二进制数据 并将其以字节数组的形式返回
return File.ReadAllBytes(path);
}
else
{
//不存在则读取失败
Debug.Log("MyCustomLoader重定向失败,文件名为" + filePath);
}
return null;
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com