XLua学习---LuaEnv加载lua脚本的几种方式

LuaEnv.Dostring()参数内为一个字符串,确切说是一个符合lua语法的字符串。在此写几种不同类型的加载方法。

首先声明    LuaEnv env=new LuaEnv();

1.最基本lua语言

env.Dostring(@"hellow world")

env.DoString(@"
mytable={name='xiaoming'}
function mytable:new()
local t={}
setmetatable(t,{__index=self})
return t
end
newTb=mytable:new()
print(newTb.name)


");

2.加载lua文件执行

这里注意的一点是lua文件不要以.lua结尾,而以.lua.txt结尾,因为最终读取的,实际上是字符串,而U3D中通过Resource加载的,有TextAsset类型可以读取txt文件,但lua文件并没有专门的类去存储。所以文件名示例为:hellow.lua.txt文件,此处放到Resources目录去方便去读取。

这里介绍三种读取文件的方式。

2.1通过Resources.Load加载,这种方法不需要再加.txt,反而加上会报错。

      通过AssetDatabase.LoadAssetAtPath加载。这里必须加后缀,不加会报错

 TextAsset text = Resources.Load("helloworld.lua");
 //TextAsset text = Resources.Load("helloworld.lua.txt");
   string st = "Assets/Resources/helloworld.lua.txt";
        TextAsset text = AssetDatabase.LoadAssetAtPath(st);

 

2.2通过Loader加载,实际上是上述方法的封装。使用require关键字,不需要加入.lua.txt

 env.DoString("require 'helloworld'");

2.3通过自定义Loader加载

实际上2.2加载的方式,就是对于放在Resource目录下的Lua文件加载的一种封装。只是这个Loader已经通过Xlua封装,不需要我们自己去定义。而2.1中通过AssetDatabase.LoadAssetAtPath加载lua脚本,就可以写成我们自定义的一种加载方式,同样通过require实现。XLua提供了AddLoader这个接口来实现其功能。代码如下:

 private byte[] MyLoader(ref string filePath)
    {   
        string absPath = Application.streamingAssetsPath + "/"+filePath+".lua.txt";
        string info = File.ReadAllText(absPath);
        return System.Text.Encoding.UTF8.GetBytes(info);
    }

然后通过env.AddLoader(MyLoader)之后,即可直接通过require实现加载streamingAssets文件夹下面的lua文件。

 

 

你可能感兴趣的:(Xlua,unity,XLua,Dostring,文件加载,unity)