ToLua学习笔记三——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包加载两种方式
publicoverridebyte[]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);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。
newLuaCustomLoader();因为LuaFileUtils中有一个构造函数:
publicLuaFileUtils(){
instance =this;}在new的时候单利就会变成重新构造的类。
4、点击Lua->Copy Lua Files To Resources将Lua文件夹下所有lua文件复制到Resources中
页:
[1]