xLua中的三种加载Lua方式
需要先把xLua插件导入到Unity程序中:
在脚本中引入XLua命名空间,
第一种:通过字符串加载lua程序
//定义一个全局唯一的LuaEnv
private LuaEnv luaenv;
// Use this for initialization
void Start () {
luaenv = new LuaEnv();
//执行lua程序
luaenv.DoString("print('Hello world')");
//释放
luaenv.Dispose();
}
第二种方式:通过文件加载lua程序
void Start () {
LuaEnv lua = new LuaEnv();
//第一种方式加载lua文件并运行
// TextAsset ta= Resources.Load<TextAsset>("HelloWorld.lua"); //会自动给HelloWorld带上txt的后缀,HelloWorld.lua.txt
//运行lua程序
// lua.DoString(ta.text);
//第二种方式加载lua文件并运行 使用lua自带的require函数
lua.DoString("require 'HelloWorld'");
//释放
lua.Dispose();
}
第三种方式:通过自定义loader加载lua程序
void Start () {
//Lua虚拟机
LuaEnv env = new LuaEnv();
//添加自己创建的Loader
env.AddLoader(CustomLoader);
//require是一个个的调用Loader查找出匹配的Lua文件,然后执行该文件 如果loader都失败,则require失败
env.DoString("require 'LuaText'");
env.Dispose();
}
//该回调返回值是一个byte数组,如果为空表示该loader找不到,否则返回lua文件的内容
//通过自定义的loader加载lua文件
public byte[] CustomLoader(ref string filepath)
{
//print(filepath);//lua文件名
//print(Application.streamingAssetsPath);//目录路径
//加载本地的lua文件 也可以加载服务器的lua文件
string s = Application.streamingAssetsPath + "/" + filepath + ".lua.txt";
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(s));
}