lua与其他语言交互,都是通过操作虚拟栈交流的。而操作虚拟栈最原始的方法就是通过lua与c语言的api,由于直接操作lua与c比较繁琐而且容易出错。因此tolua作为中间层而存在。

那么unity要把一个C#对象传递到lua里面,要怎么做呢?

1. 调用接口Tolua.Push(L,obj);这里的L指的是对应的luastate,obj就是c#对象;

• luastate 中放的是lua虚拟机中环境表、注册表、运行堆栈、虚拟机的上下文等数据。

•从一个主线程(特指lua虚拟机中的线程,即coroutine)中创建出来的新的luaState会共享大部分数据,但会拥有一个独立的运行堆栈。所以一个线程对象拥有一个luaState。

2. 如果 obj == null,会调用原生api(lua_pushnil(L,-1))把一个nil值压入栈顶,所以c#这边为null,lua那边会接收到一个nil值;如果obj 不为null,通过obj.GetTYpe()获取obj的类型,为了便于理解,姑且把这个obj认为是GameObject类型;

3. 接下来tolua会去字典查找GameObject在lua中对应的metatable的ref,这个字典的类型为Dictionary,所以ref是一个int类型的值。说到这里,可能会有两个疑点,a.这个metatable是什么东西?b. 这个metatable的ref又是什么东西?

我们都知道,如果在lua中使用C#对象,要生成对应的xxxwrap.cs文件,这些wrap文件都是一些static方法,用来和luastate进行绑定,然后就可以在lua中调用c#对象了。在绑定一个C# Class

的时候,会调用BeginClass(tolua_beginclass)来告诉lua我要绑定一个class。

其实在beginclass之前,会先调用beginmodule,比如beginmodule(“UnityEngine”),意思是在lua创建一个全局table,这个table名字就叫UnityEngine。并设置package.load["UnityEngine"] = UnityEngine

lua和unity如何交互_Unity中C#对象与Lua之间交互的原理相关推荐

  1. jq js json 转字符串_JS中JSON对象和String之间的互转及处理技巧

    json:JavaScript 对象表示法(javascript Object Notation),其实JSON就是一个javaScript的对象(Object)而已. 如有不清楚JSON,可以去w3 ...

  2. axure 图片切换图片的交互_AxureRP8中实现伸缩式的图片展示交互效果

    上午的时候,在一个群里看到这样的实现需求. 伸伸缩缩,感觉很爽的样子. 那么,这样的一个交互效果如何实现呢? 详细的教程我就不写了,直接上交互截图和源文件就好了. 好多操作步骤是吧? 实际上,只需要在 ...

  3. unity控制程序等待_Unity 中的协同程序

    今天咱就说说,协同程序coroutine.(这文章是在网吧敲的,没有unity,但是所有结论都被跑过,不管你信得过我还是信不过我,都要自己跑一下看看,同时欢迎纠错) 先说说啥是协程:协同程序是一个非常 ...

  4. unity 发光字体_Unity中字体的一些知识

    Unity中的字体常用的有:内置字体,外部导入的字体,自定义的字体. 1,内置字体. 内置字体一般是指unity自带的字体,Windows下unity自带字体为Arial,如果游戏中使用Arial字体 ...

  5. unity 画球面_unity中实现Mesh画球体、半球体、四分之一球体以及任意弧面

    感谢两篇文章: mesh绘制模型:https://blog.csdn.net/qq_29579137/article/details/77369734?depth_1-utm_source=distr ...

  6. lua脚本在redis集群中执行报错--Lua script attempted to access a non local key in a cluster node...

    EVAL.EVALSHA命令 Redis从2.6.0版本开始提供了eval命令,通过内置的Lua解释器,可以让用户执行一段Lua脚本并返回数据.因为Redis单线程模型的特点,可以保证多个命令的原子性 ...

  7. 对象转数组_fastJson中java对象 jsonObject jsonArray之间转换

    一.介绍 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 二.使用 1.java对象转jsonObject User u = new User(); ...

  8. 《交互式程序设计 第2版》一1.2 交互领域中的编程

    本节书摘来华章计算机<交互式程序设计 第2版>一书中的第1章 ,第1.2节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区"华章 ...

  9. 4 UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它 们之间可能传递的消息,以下不是交互图的是( )

    标签: 软考初级程序员易错题,计算机基础, 面向对象基础,统一建模语言 (UML) UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息,以下不是交互图的是( ...

最新文章

  1. Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装
  2. Cisco ASA 5500系列防火墙 Series Adaptive Security Appliances
  3. 乘风破浪的前端小姐姐,是如何一步步走向成功的?
  4. 安卓USB开发教程 一 USB Host 与 Accessory
  5. 一个PHP压缩类,在线压缩文件
  6. Mono for Android 优势与劣势
  7. Tricks(四十五)—— 可视化 min 和 max(表示一种截断)
  8. 20144303 《Java程序设计》第一周学习总结
  9. libpcap中主要函数使用介绍
  10. opencv3编程入门毛星云(第五章节5.2)
  11. iOS视频录制及gif图片制作
  12. [Windows] CVE-2011-2005 Afd.sys 本地提权漏洞复现
  13. Mac上使用微信读书(微信读书网页版)
  14. [原创]IBM BLM模型思维导图
  15. 定位“良心优品”,国民手机Z5能否让联想重回辉煌?
  16. linux下低格u盘,u盘低级格式化操作
  17. 软件工程毕业设计课题(78)微信小程序毕业设计PHP校园食堂就餐预约小程序系统设计与实现
  18. 阿里云将全面提供IPv6服务 | 中国制造业正被双向挤压,需智能化发展
  19. 『现学现忘』Docker相关概念 — 1、云计算概念
  20. java 红外光谱数据库_免费的谱图数据库20个 - 晶体 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. java复合数据类型_复合数据类型
  2. ESP32在Ubuntu16.04的环境搭建
  3. Android 系统调试(1) 禁止SeLinux
  4. [Python3] 020 借函数,谈一谈变量的作用域
  5. Jmeter将JDBC Request查询结果作为下一个接口参数方法
  6. windows下使用salt安装软件
  7. CentOS7 安装NFS SSH免密码登陆
  8. 在日期格式化的时候提示错误:Tostring没有采用一个参数的重载
  9. 怎么看android sdk 文档
  10. Invalid URI