美文网首页
toLua介绍

toLua介绍

作者: APP4x | 来源:发表于2020-09-16 14:03 被阅读0次

    toLua地址:传送门

    我也是刚初学lua,项目使用的toLua,所以直接下载toLua并使用Example进行学习一波~
    Lua的语法推荐在菜鸟上看:传送门


    1.hello world.cs

    using UnityEngine;
    using LuaInterface;
    using System;
    
    public class HelloWorld : MonoBehaviour
    {
        void Awake()
        {
            LuaState lua = new LuaState();
            lua.Start();
            string hello =
                @"                
                    print('hello tolua#')                                  
                ";
            
            lua.DoString(hello, "HelloWorld.cs");
            lua.CheckTop();
            lua.Dispose();
            lua = null;
        }
    }
    

    看似比较简单啊。实际上需要剖析几个问题
    LuaState是啥?
    Start方法有啥用?
    DoString有啥用?
    CheckTop是干啥的?
    Dispose又有啥用?

    不要想当然,觉得DoString,就是能执行lua代码了。
    那么怎么执行的?为什么能执行?如果连这些都不知道,那就还是不懂Lua啊!!

    (推荐一篇大佬的文章:ToLua源码分析:启动流程,以下都是我对此文章的总结)

    toLua是啥?
    toLua基于LuaInterface,LuaInterface是一个实现lua和微软.Net平台的CLR混合编程的开源库,使得lua脚本可以实例化CLR对象,访问属性,调用方法甚至使用lua函数来处理事件。
    toLua保留了LuaInterface基本形式,重写或移除了部分内容,使代码更加简洁,提供了对Unity的支持、拓展了lua5.1.4源码,而最大的改进在于,LuaInterface中lua访问CLR需要运行时反射,对于游戏应用来说效率不够理想
    toLua则提供了一套中间层导出工具,对于需要访问的CLR、Unity及自定义类预生成wrap文件,lua访问时只访问wrap文件,wrap文件接收lua传递来的参数,进行类型(值、对象、委托)转换,再调用真正工作的CLR对象和函数,最后将返回值返回给lua,有效地提高了效率。

    提供的功能
    1.提供Lua-c#值类型、对象类型转化操作交互层。(ObjectTranslator.cs、LuaFunction.cs、LuaTable.cs、ToLua.cs等)
    (大概意思就是toLua会对一些交互 进行封装 通过指针进行操作中间层?)
    2.提供Lua虚拟机创建、启动、销毁,Require、DoFile、DoString、Traceback等相关支持。(LuaState.cs、LuaStatic.cs)
    (创建Lua虚拟机,并提供相关支持)
    3.提供导出工具,利用c#反射,对指定的c#类生成对应的wrap文件,启动后将所有wrap文件注册到lua虚拟机中。(ToLuaMenu.cs、ToLuaExport.cs、ToLuaTree.cs、LuaBinder.cs、CustomSetting.cs等)
    (避免直接反射,先注册,通过这个玩意能调用到真正的CLR中)
    4.提供c#对象和lua userdata对应关系,使该userdata能访问对应c#对象属性,调用对应c#对象函数。lua支持一定的面向对象(类、继承)。管理这些对象的内存分配与生命周期、GC。(LuaState.cs)
    (userdata 是啥没用过啊。。以后再说)
    5.提供支持功能Lua Coroutine、反射等,Lua层重写部分性能有问题对象如Vector系列。(Vector3.lua等)
    (就是提供某些功能)


    启动介绍

    LuaState lua = new LuaState();
    lua.Start();
    

    这两行代码就能启动lua虚拟机,但是内部做了什么呢??????

    LuaState 继承 LuaStatePtr
    LuaStatePtr 内部包含一个 System.IntPtr L 的指针,也就是lua虚拟机栈,还对LuaDLL的方法进行了封装

    **未完待续。。。
    **

    相关文章

      网友评论

          本文标题:toLua介绍

          本文链接:https://www.haomeiwen.com/subject/qleeuhtx.html