toLua介绍

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的方法进行了封装

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值