1.Scripts name :LuaController
使用Fill.ReadAllBytes来获取指定文件夹下的文件
public virtual byte[] Load(ref string fillName)
{
string filePath = SnakeUtils.Root + fillName; // lua文件的实际路径
fillName = fillName.Replace('.', '/'); // 返给lua调试器的路径,不用调试lua的就不用管这个了
try
{
// File.ReadAllBytes返回值可能会带有BOM(0xEF,0xBB,0xBF),这会导致脚本加载出错(<\239>)
byte[] script = System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(filePath));
return script;
}
catch
{
return null;
}
}
Xlua解释器 LuaEnv(全局只有一个,在这里我使用了实例化一个静态实例的方式) 想要在文件中可以require到东西
需要向Xlua解释器中添加自定义loader 当我们在lua文件中require文件时就会使用我们自定义的loader
然后当我们在lua中require的时候就会在我们这个路径加载文件(这个loader可以添加多个,个人感觉一般项目只需要一个就行)
下面是LuaController的实现
static LuaEnv luaenv;
LoaderFile lf;
public LuaEnv Luaenv {
get { if (luaenv == null)
{
luaenv = new LuaEnv();
lf = new LoaderFile();
luaenv.AddLoader(lf.LoadLua);
}
return luaenv;
}
}
public static LuaController Instance
{
get { if (instance == null)
{
GameObject g = new GameObject("LuaController");
instance = g.AddComponent(); g.AddComponent();
}
return instance;
} }
static LuaController instance;
private void Awake()
{
Luaenv.DoString("require 'init'");
}