//引用命名空间
using XLua;
public class L1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//Lua解析器 让我们在Unity中使用luaLuaEnv env = new LuaEnv();//执行env.DoString("print('OK')");//执行一个Lua脚本 在resource文件夹下env.DoString("require('Main')");//垃圾回收env.Tick();//销毁Lua解析器env.Dispose();}
}
这样只能读取Resources文件夹下的脚本,但是我们做热更新需要从AB包中读取,所以需要自定义加载路径
public class L2 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){LuaEnv env = new LuaEnv();//XLua提供的路径重定向方法//自定义加载Lua文件的规则env.AddLoader(MyLoader);env.DoString("require('Main')");}/// <summary>/// /// </summary>/// <param name="filePath">Lua脚本文件名</param>/// <returns></returns>private byte[] MyLoader(ref string filePath){//在这里自定义加载逻辑string path = Application.dataPath + "/Lua/" + filePath + ".lua";//得到路径后加载文件//引用命名空间if (File.Exists(path)){return File.ReadAllBytes(path);}else{print("MyLoader加载失败,文件名为"+path);return null;}}
}
require寻找文件的逻辑是,先找AddLoader中自定义的路径(可以有多个路径)中有没有相应文件,再去Resources下查找