默认在asset文件下创建了一个Lua文件,专门用来存放lua脚本
默认有luaAB包,并且AB包中lua脚本的名称为 XXX.lua
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;
public class LuaMgr : BaseManager<LuaMgr>
{
LuaEnv luaEnv;
public LuaTable Globa => luaEnv.Global;
/// <summary>
/// 初始化
/// </summary>
public void Init()
{
luaEnv = new LuaEnv();
luaEnv.AddLoader(CustomLoader);
//luaEnv.AddLoader(CustomABLoader);
}
private byte[] CustomLoader(ref string filepath)
{
string path = Application.dataPath + "/Lua/" + filepath + ".lua";
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
Debug.Log("文件重定向失败,文件名:" + filepath);
}
return null;
}
private byte[] CustomABLoader(ref string filepath)
{
string path = Application.streamingAssetsPath + "/lua";
//加载AB包
AssetBundle luaAB = AssetBundle.LoadFromFile(path);
//加载包中指定lua脚本
TextAsset lua = luaAB.LoadAsset(filepath + ".lua", typeof(TextAsset)) as TextAsset;
if (lua != null)
{
return lua.bytes;
}
else
{
return null;
}
}
/// <summary>
/// lua中执行c#
/// </summary>
/// <param name="filepath">lua字符串</param>
public void DoString(string filepath)
{
if (luaEnv is null)
{
return;
}
luaEnv.DoString(filepath);
}
public void DoLuaFile(string filepath)
{
DoString(string.Format("require('{0}')", filepath));
}
/// <summary>
/// 释放资源
/// </summary>
public void Tick()
{
if (luaEnv is null)
{
return;
}
luaEnv.Tick();
}
/// <summary>
/// 销毁lua解析器
/// </summary>
public void Dispose()
{
if (luaEnv is null)
{
return;
}
luaEnv.Dispose();
}
}