ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ToLua学习笔记三——toLua解析器自定义解析方式

2021-03-01 14:58:46  阅读:188  来源: 互联网

标签:解析器 自定义 Lua 后缀 fileName lua ToLua 加载


一、自定义路径

toLua为我们定义了执行Lua文件的路径"Assets/Lua",那么执行其他路径的lua文件要怎么办呢?
1、在Asset/Lua文件夹下新建一个文件夹“C#CallLua”并在里面创建一个lua文件“Loader.lua”。
此时直接使用luaState.Require执行会报错:module ‘Loader’ not found,因为Require默认只能找到Assets/Lua文件夹下的lua文件。
2、第一种方式:如果文件属于Lua文件夹下,可以直接加父目录

luaState.Require("C#CallLua/Loader");

3、第二种方式:使用AddSearchPath方法添加查找路径

luaState.AddSearchPath(Application.dataPath+"/Lua/C#CallLua");
luaState.Require("Loader");

4、移除搜索路径(使用较少不建议只用)

luaState.RemoveSeachPath(Application.dataPath+"/Lua/C#CallLua");

二、自定义解析方式

要自定义解析方式,需要新建一个类,继承LuaFileUtils,重写加载函数。
1、新建一个脚本LuaCustomLoader并继承LuaFileUtils。
2、重写ReadFile函数。
首先要注意到的是,不管从ab包中加载还是从res中加载,都不支持用.lua后缀,所以tolua加上了bytes后缀,当然我们自己也可以加上.txt后缀,所以我们要在传入的fileName后面加上“.lua”
完整代码如下,重写中包含了从res加载和从ab包加载两种方式

public override byte[] ReadFile(string fileName){
        //Debug.Log("自定义解析方式"+fileName);
        //如果想要重新定义 解析lua的方式 那么只需要在该函数中去写逻辑即可
        //如果没有lua后缀,加上lua后缀,不管从ab包中加载还是从res中加载,都不支持用.lua后缀,所以tolua加上了bytes后缀
        //我们自己可以加上.txt后缀
        if (!fileName.EndsWith(".lua")){
            fileName += ".lua";
        }
        byte[] buffer = null;
        //因为进行热更新的lua代码 肯定是我们自己写的上层lua逻辑

        //从ab包中加载lua文件
        //C#CallLua/Lesson2_Loader可能传入这样的名字,但是在AB包中只需要文件名,所以需要拆分一下
        string[] strs = fileName.Split('/');
        //加载ab包中的lua文件
        TextAsset luaCode = ABMgr.GetInstance().LoadRes<TextAsset>("lua",strs[strs.Length-1]);
        if(luaCode!=null){
            buffer = luaCode.bytes;
            Resources.UnloadAsset(luaCode);
        }

        //tolua的自带逻辑和自带lua类,我们不太需要热更新,直接从resources中加载即可
        if(buffer == null)
        {
            //从resources中加载lua文件
            string path = "Lua/"+fileName;
            TextAsset text = Resources.Load<TextAsset>(path);
            if(text!=null)
            {
               buffer = text.bytes;
               //卸载使用后的文本资源
               Resources.UnloadAsset(text);
            }
        }
        return buffer;
    }

3、在初始化luastate之前 new一个LuaCustomLoader。

new LuaCustomLoader();

因为LuaFileUtils中有一个构造函数:

public LuaFileUtils()
        {
            instance = this;
        }

在new的时候单利就会变成重新构造的类。
4、点击Lua->Copy Lua Files To Resources将Lua文件夹下所有lua文件复制到Resources中

标签:解析器,自定义,Lua,后缀,fileName,lua,ToLua,加载
来源: https://blog.csdn.net/qq_39029746/article/details/114261056

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有