在上文中我们学会学会更改加载路径,加载对应文件夹下的lua脚本。
默认解析加载的lua脚本存在的文件位置非ab包或者resources文件夹下往往不能随包体更新,这显然不符合热更需要。因此自定义继承
tolua中lua脚本加载解析类luafileutils来重写对应的lua脚本加载方法。
public class luacustomload:luafileutils
{
///
/// 优先从assetbundle中加载(默认ab文件名称为lua) resources文件夹下lua文件夹加载
///
///
///
public override byte[] readfile(string filename)
{
//后缀名称检查处理
if (!filename.endswith(".lua"))
{
filename = ".lua";
}
//二进制文件流
byte[] buffer = null;
//解析路径名称
string[] tempfilepath = filename.split('/');
debug.log(tempfilepath[tempfilepath.length - 1]);
textasset luatext = loadassetbundlemanager.instance().loadresource("lua",tempfilepath[tempfilepath.length - 1]);
if (luatext != null)
{
buffer = luatext.bytes;
}
//从resources文件夹下加载lua脚本
if (buffer == null)
{
debug.log("从resources资源包中加载");
string filepath = "lua/" filename;
//读取文件
textasset textasset = resources.load(filepath);
if (textasset != null)
{
buffer = textasset.bytes;
//卸载资源
resources.unloadasset(textasset);
}
}
return buffer;
}
}
将lua脚本打入resorces文件夹下(.lua文件)
测试:此时还未将lua脚本打入assetbundle包 所以从resources文件夹下加载lua脚本。(报错是因为assetbundle文件不存在!后期可以完善此lua文件加载脚本逻辑)
现在我们将lua脚本打入assetbundle中
此处踩坑:lua脚本打入ab包失败!将lua脚本后缀添加 [.txt] ,打包之前将tolua脚本清空。
测试使用自定义脚本要点:
在使用luastate之前先实例化自定义的加载方法:
这样,继承的luafileutils的自定义类会调用其构造函数,将子类实例化的this赋值给instance,从而执行子类重写的readfile方法。
测试代码: