Unity ToLua 之 C#调用Lua

Unity ToLua 之 C#调用Lua,第1张

Unity ToLua 之 C#调用Lua(一) 一.Lua解析器
  • 初始化时相比于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;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存