- 初始化时相比于XLua需要对虚拟机执行Start方法,释放时需要先检查栈顶元素
public class Lesson01_LuaState : MonoBehaviour
{
private LuaState _luaState;
private void Start()
{
_luaState = new LuaState();
_luaState.Start();
_luaState.DoString("print('Hello World')");
//加不加都行
_luaState.DoFile("Main");
//不加后缀
//_luaState.Require("Main");
}
private void OnDestroy()
{
//释放Lua虚拟机
_luaState.CheckTop();
_luaState.Dispose();
_luaState = null;
}
}
二.自定义路径加载
- 如果是在Lua文件夹的子文件夹只需要添加对应的相对路径即可
- 否则可以添加自定义的路径来进行加载
_luaState.AddSearchPath("MyLua/");
三.自定义加载器
- 虽然可以自定义路径加载文件,但是打包后无法加载AssetBundle和Resources下的Lua文件,所以需要自定义加载器来进行加载
- 与XLua相比XLua只需要添加一个委托函数即可,但是ToLua需要重写父类的方法
- LuaFileUtils脚本是一个单例,写一个派生它的子类,实现重写
public class ToLuaCustomLoader : LuaFileUtils
{
public override byte[] ReadFile(string fileName)
{
if (!fileName.EndsWith(".lua"))
fileName += ".lua";
byte[] buffer = null;
var strs = fileName.Split('/');
var textAsset = ABMgr.GetInstance().LoadRes<TextAsset>("lua", strs[strs.Length - 1]);
if (textAsset != null)
{
buffer = textAsset.bytes;
Resources.UnloadAsset(textAsset);
}
//说明在AssetBundle中没有找到文件,需要从默认的Resources文件夹下面寻找
if (buffer == null)
{
var asset = Resources.Load<TextAsset>("Lua/" + fileName);
if (asset != null)
{
buffer = asset.bytes;
Resources.UnloadAsset(asset);
}
}
#if UNITY_EDITOR
//编辑器下加载自己所写的Lua文件的默认路径
if (buffer == null)
{
if (File.Exists("Assets/Lua/" + fileName))
{
buffer = File.ReadAllBytes("Assets/Lua/" + fileName);
}
}
//编辑器下加载ToLua自带的Lua文件的默认路径
if (buffer == null)
{
if (File.Exists("Assets/ToLua/Lua/" + fileName))
{
buffer = File.ReadAllBytes("Assets/ToLua/Lua/" + fileName);
}
}
#endif
return buffer;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)