找回密码
 立即注册
查看: 205|回复: 0

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

[复制链接]
发表于 2023-1-30 10:44 | 显示全部楼层 |阅读模式
一、自定义路径

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文件夹下,可以直接加父目录
  1. luaState.Require("C#CallLua/Loader");
复制代码
3、第二种方式:使用AddSearchPath方法添加查找路径
  1. luaState.AddSearchPath(Application.dataPath+"/Lua/C#CallLua");
  2. luaState.Require("Loader");
复制代码
4、移除搜索路径(使用较少不建议只用)
  1. luaState.RemoveSeachPath(Application.dataPath+"/Lua/C#CallLua");
复制代码
二、自定义解析方式

要自定义解析方式,需要新建一个类,继承LuaFileUtils,重写加载函数。
1、新建一个脚本LuaCustomLoader并继承LuaFileUtils。
2、重写ReadFile函数。
首先要注意到的是,不管从ab包中加载还是从res中加载,都不支持用.lua后缀,所以tolua加上了bytes后缀,当然我们自己也可以加上.txt后缀,所以我们要在传入的fileName后面加上“.lua”
完整代码如下,重写中包含了从res加载和从ab包加载两种方式
  1. publicoverridebyte[]ReadFile(string fileName){//Debug.Log("自定义解析方式"+fileName);//如果想要重新定义 解析lua的方式 那么只需要在该函数中去写逻辑即可//如果没有lua后缀,加上lua后缀,不管从ab包中加载还是从res中加载,都不支持用.lua后缀,所以tolua加上了bytes后缀//我们自己可以加上.txt后缀if(!fileName.EndsWith(".lua")){
  2.             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){
  3.             buffer = luaCode.bytes;
  4.             Resources.UnloadAsset(luaCode);}//tolua的自带逻辑和自带lua类,我们不太需要热更新,直接从resources中加载即可if(buffer ==null){//从resources中加载lua文件string path ="Lua/"+fileName;TextAsset text = Resources.Load<TextAsset>(path);if(text!=null){
  5.                buffer = text.bytes;//卸载使用后的文本资源
  6.                Resources.UnloadAsset(text);}}return buffer;}
复制代码
3、在初始化luastate之前 new一个LuaCustomLoader。
  1. newLuaCustomLoader();
复制代码
因为LuaFileUtils中有一个构造函数:
  1. publicLuaFileUtils(){
  2.             instance =this;}
复制代码
在new的时候单利就会变成重新构造的类。
4、点击Lua->Copy Lua Files To Resources将Lua文件夹下所有lua文件复制到Resources中
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 09:26 , Processed in 0.090287 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表