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<TextAsset>("helloworld.lua");
//TextAsset text = Resources.Load<TextAsset>("helloworld.lua.txt");
string st = "Assets/Resources/helloworld.lua.txt";
TextAsset text = AssetDatabase.LoadAssetAtPath<TextAsset>(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文件。