通过自定义loader 加载lua源文件
在xLua加自定义loader是很简单的,只涉及到一个接口:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。
有了这个就简单了,用IIPS的IFS?没问题。写个loader调用IIPS的接口读文件内容即可。文件已经加密?没问题,自己写loader读取文件解密后返回即可。。。
注:
在执行Loader时,它会先在自定义的Loader中去读取lua文件,
没有读取到,它会尝试到自定的loader位置读取,即Resources目录下
在自定义文件夹中读取:
此处在StreamingAssets文件下读取
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;
public class _003_DefineLoader : MonoBehaviour {
void Start () {
LuaEnv env = new LuaEnv();
env.AddLoader(MyLoader);
env.DoString("require 'downloadfile'");
}
private byte[] MyLoader(ref string filepath)
{
string path = Application.streamingAssetsPath + "/" + filepath + ".lua.txt";//完整路径
return File.ReadAllBytes(path);
}
}
输出结果: