栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity ToLua 之 C#调用Lua(一)

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity ToLua 之 C#调用Lua(一)

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("lua", strs[strs.Length - 1]);
        if (textAsset != null)
        {
            buffer = textAsset.bytes;
            Resources.UnloadAsset(textAsset);
        }
        //说明在AssetBundle中没有找到文件,需要从默认的Resources文件夹下面寻找
        if (buffer == null)
        {
            var asset = Resources.Load("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;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号