首先为什么我们需要一个Lua解析器管理器?
因为每次创建一个新的C#调用lua类时,我们都需要创建一个lua解析器,步骤重复,且难以保证解析器唯一性。因此创建一个lua解析器管理类,来保证LuaEnv唯一性,并提供它。
首先创建一个单例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//1.C#中 泛型的知识
//2.设计模式中 单例模式的知识
public class BaseManager<T> where T:new()
{
private static T instance;
public static T GetInstance()
{
if (instance == null)
instance = new T();
return instance;
}
}
这个单例类的GetInstance()方法可以保证只有一个instance(对象实例)。
然后创建Lua解析器管理器继承它。
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
/// <summary>
/// Lua管理器
/// 提供lua解析器
/// 保证解析器唯一性
/// </summary>
public class LuaManager :BaseManager<LuaManager>
{
//执行Lua语言的函数
//释放垃圾
//销毁
//重定向
private LuaEnv luaEnv;
}
我们除了需要lua管理器去生成LuaEnv,还需要它干嘛呢?
当然还要它去执行其他的东西拉。我们需要重写4个接口:执行lua语言、释放垃圾、销毁解析器、执行lua脚本等
/// <summary>
/// 传入lua文件名
/// </summary>
/// <param name="fileName"></param>
public void DoluaFile(string fileName)
{
string str = string.Format("require('{0}')", fileName);
Dostring(str);
}
//重新写四个方法,相当于给外面的接口让他们调用
/// <summary>
/// 执行