找回密码
 立即注册
查看: 287|回复: 0

toLua介绍

[复制链接]
发表于 2021-8-11 11:52 | 显示全部楼层 |阅读模式
toLua地址:传送门
我也是刚初学lua,项目使用的toLua,所以直接下载toLua并使用Example进行学习一波~
Lua的语法推荐在菜鸟上看:传送门

1.hello world.cs
  1. using UnityEngine;using LuaInterface;using System;publicclassHelloWorld:MonoBehaviour{voidAwake(){LuaState lua =newLuaState();
  2.         lua.Start();string hello =@"               
  3.                 print('hello tolua#')                                 
  4.             ";
  5.         
  6.         lua.DoString(hello,"HelloWorld.cs");
  7.         lua.CheckTop();
  8.         lua.Dispose();
  9.         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等)
(就是提供某些功能)

启动介绍
  1. LuaState lua =newLuaState();
  2. lua.Start();
复制代码
这两行代码就能启动lua虚拟机,但是内部做了什么呢??????
LuaState 继承 LuaStatePtr
LuaStatePtr 内部包含一个 System.IntPtr L 的指针,也就是lua虚拟机栈,还对LuaDLL的方法进行了封装
未完待续。。。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:24 , Processed in 0.090015 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表