概述





Tolua框架导入和AB包相关准备

结合视频进行项目资源导入。

C#调用Lua

1.toLua解析器




2.toLua解析器自定义解析方式

自定义路径






自定义解析方式

using System.Collections;
using System.Collections.Generic;
using LuaInterface;
using UnityEngine;
public class LuaCustomLoader : LuaFileUtils
{
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文件
//CSharpCallLua/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文件
//先要通过 窗口的Lua ——> Copy Lua files to Resources 将lua文件加载到res文件下
//注意:它只能把lua文件夹下的自定义文件拷贝到res下
string path = "Lua/" + fileName;
TextAsset text = Resources.Load<TextAsset>(path);
if(text != null){
buffer = text.bytes;
//卸载使用后的 文本资源
Resources.UnloadAsset(text);
}
}
return buffer;
}
}


3.toLua解析器管理器

using System.Collections;
using System.Collections.Generic;
using LuaInterface;
using UnityEngine;
/// <summary>
/// 学习的主要目标 通过LuaMgr来管理唯一的一个toLua解析器
/// 要把该管理器 做成一个 继承了mono的 单例模式对象 因为之后的知识点 需要用到它的特性
/// </summary>
public class LuaMgr : SingletonAutoMono<LuaMgr>
{
private LuaState luaState;
public void Init(){
//最后打包的时候 再用 再取消注释
//new LuaCustomLoader();
//就是初始化 唯一的 luaState
luaState = new LuaState();
luaState.Start();
//后面有些东西没写 当我们学习到对应知识点时 再来写
//委托初始化相关
//协程相关
//Lua使用Unity中的类相关
}
/// <summary>
/// 该属性可以让外部获取到 解析器
/// </summary>
/// <value></value>
public LuaState LuaState{
get{
return luaState;
}
}
/// <summary>
/// 提供一个外部执行 lua语法字符串的 方法
/// </summary>
/// <param name="str">lua语法字符串</param>
/// <param name="chunkName">执行出处</param>
public void DoString(string str, string chunkName = "LuaMgr.cs"){
luaState.DoString(str, chunkName);
}
/// <summary>
/// 执行指定名字的lua脚本
/// </summary>
/// <param name="fileName"></param>
public void Require(string fileName){
luaState.Require(fileName);
}
/// <summary>
/// 销毁lua解析器
/// </summary>
public void Dispose(){
if(luaState == null)
return;
luaState.CheckTop();
luaState.Dispose();
luaState = null;
}
}


最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



