我们提供安全,免费的手游软件下载!
在之前的教程中,我们学习了如何改变加载路径,以及加载指定文件夹下的Lua脚本。
默认情况下,加载的Lua脚本存储位置通常不在AB包或者Resources文件夹中,因此无法随包体进行更新。这显然不符合热更的需求。因此,我们需要自定义继承tolua中的LuaFileUtils类,来重写对应的Lua脚本加载方法。
以下是自定义的Lua文件加载类LuaCustomLoad的代码:
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方法。
最后,进行测试代码:
热门资讯