我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

自定义Lua解析方式

来源:网络 更新时间:2024-05-06 04:30:27

在之前的教程中,我们学习了如何改变加载路径,以及加载指定文件夹下的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方法。

最后,进行测试代码: