Lua运行环境单例
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
/// <summary>
/// Lua环境单例
/// </summary>
public class xLuaEnv
{
#region Lua单例
private static xLuaEnv instance = null;
private LuaEnv _Env;
public static xLuaEnv Instance
{
get
{
if (instance == null)
{
instance = new xLuaEnv();
}
return instance;
}
}
#endregion
//构造函数 new时执行
#region 创建Env解析器(Lua运行环境)
private xLuaEnv()
{
_Env = new LuaEnv();
_Env.AddLoader(_ProjectLoader);
}
#endregion
/// <summary>
/// 释放运行环境 删除单例
/// </summary>
public void FreeEnv()
{
_Env.Dispose();
instance = null;
}
#region 加载器
private byte[] _ProjectLoader(ref string filePath)
{
string path = Application.dataPath;
path = path.Substring(0, path.Length - 7) + "/DataPath/Lua/" + filePath + ".lua";
if (File.Exists(path))
return File.ReadAllBytes(path);
else
return null;
}
#endregion
/// <summary>
/// 运行Lua代码
/// </summary>
/// <param name="LuaCode"></param>
/// <returns></returns>
public object[] RunLua(string LuaCode)
{
return _Env.DoString(LuaCode);
}
}
调用
xLuaEnv.Instance.RunLua("require('Test')");
private void OnDestroy()
{
xLuaEnv.Instance.FreeEnv();
}