ulua中lua代码使用反射调用c#详解
1、官方解释
2、代码层分析
2.1 官方脚本
2.2 语句 luanet.load_assembly(‘UnityEngine’)解析
LuaState lua = new LuaState();
LuaState构造函数-实例化ObjectTranslator
ObjectTranslator 构造函数-将loadAssembly函数注册到lua中并命名为load_assembly
loadAssembly函数的实现-取得参数(assemb名称)-获取assemb-装入translator集合中
所以 luanet.load_assembly(‘UnityEngine’)就是调用的上面c#中的loadAssembly函数取得UnityEngine集合
2.3 luanet.import_type(‘UnityEngine.GameObject’) 解析
通过2.2可以找到luanet.import_type是在调用c#中的importType函数
importType函数实现-从translator集合中找到该类-将该类返回到lua,注意return 1是指返回了一个值,并不是返回1
2.3.1translator集合返回查找类到lua详解-上面提到return 1并不是返回1而是指返回了一个值也就是返回的查找类(涉及到c#与lua交互栈)
将查找到的type,push到交互栈上面
简单封装-指定查找类型为class
如果前面查找过该类就会缓存起来方便下次使用-缓存实现在addObject(o, beValueType)中实现,addObject(o, beValueType)也会把交互栈的顶层位置返回出来方便将该类push到交互栈
计算位置并缓存
主要push并弹出的算法
LuaDLL.luanet_newudata(luaState, index);//新建一个userdata
LuaDLL.luaL_getmetatable(luaState, metatable);//将luaNet_class表弹到栈顶也就是-1的位置,此时新创建的userdata在luaNet_class下面也就是-2的位置
LuaDLL.lua_setmetatable(luaState, -2);//用新创建的userdata创建元表给luaState,由于没有看到lua的源码,有点不确定
LuaDLL.lua_pushvalue(luaState, -1);//将luaNet_class复制一份弹到栈顶
LuaDLL.lua_rawseti(luaState, -3, index);//将新创建的userdata弹出返回到lua
ulua中lua代码使用反射调用c#详解相关推荐
- 继承关系中构造函数、析构函数的调用顺序详解
构造函数: 在c++中,当声明一个派生类的对象时,派生类中包含所有父类的数据成员以及自己添加的数据成员均已被分配了内存,只是尚未进行初始化配置(但实际上基本数据类型的变量已经被赋予随机默认值). 构造 ...
- python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法
我来教你 js文件怎么通过python访问数据库,希望能够为你带来帮助. 1.如果是要提交表单内容给 服务器的 python 处理,那么只需要在表单 里面的 action 填写服务端的处理路由就可以了 ...
- Lua中的loadfile、dofile、require详解
这篇文章主要介绍了Lua中的loadfile.dofile.require详解,本文分别用实例讲解它的用法和特点等内容,需要的朋友可以参考下 本来今天不应该讨论这几个函数的,不过,为了凑字数..不,为 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- WPF中的形状Shape与几何图形Geometry详解
总目录 文章目录 总目录 一.Shape(形状) 1.Shape基本信息 2.Ellipse 1.案例 2.说明 3.Rectangle 1.案例 2.说明 4.Line 1.案例 2.说明 5.Po ...
- python中的class怎么用_对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...
- java中sleep()、wait()相同与不同详解
java中sleep().wait()相同与不同详解 相同 java中Thread#sleep和Object#wait方法都是暂停当前线程,当前线程让出CPU占用.并不存在调用sleep后还占用CPU ...
- php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解
这篇文章主要介绍了修改WordPress中文章编辑器的样式的方法详解,同时文中也推荐了两款取代默认文章编辑器的插件,需要的朋友可以参考下 自定义文章编辑器的样式每一个 WordPress 主题的文章样 ...
- python中class变量_对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...
最新文章
- mysql1040_mysql Error 1040 too many connection解决办法
- 给web请求加遮罩动画
- 【ASP.NET开发】ASP.NET(MVC)三层架构知识的学习总结
- install命令和cp命令的区别
- 《仙剑奇侠传7》试玩版战斗系统拆解与分析
- 欢乐SSL初二组周六赛【2019.5.11】
- (转载)UI接口分层自动化测试框架设计思想
- Linux中sudo、su和su -命令的区别
- 【数字逻辑设计】基本逻辑门
- SpringBoot:第一篇 新建spring boot 应用
- 【转】修改UCGUI源代码以支持多个独立窗体的说明
- 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)
- 官方教程:Apache Kylin和Superset集成,使用开源组件,完美打造OLAP系统
- 已知圆上三点坐标求圆心
- 【JAVA】金额工具类 金额千分位、中文大写金额、英文金额
- IOS开发教程第一季之02UI进阶day4合并IOS学习015--Segue小专题、沙盒存储小专题、归档/解档、TabBarController、App主流UI框架结构
- hdu6638 Snowy Smile 离散 扫描线 线段树
- MATLAB在数学建模中的应用 随手笔记(二)----- 数据拟合方法
- 2022客户体验管理白皮书
- DataStory X Kungfu | DemoDay亮点大揭秘
热门文章
- 铰接板荷载横向分布影响线竖标表 计算程序2017
- 全能视频转换工具:OmniConverter全能转换器 for Mac
- laravel5 Excel Excel/CSV 文件导入导出功能
- 网络爬虫与信息提取--正则表达式---淘宝商品比价定向爬虫
- 苹果秋季发布会:​​Apple Watch推出“家庭设置”
- 【VRP问题】基于遗传算法求解带容量的VRP问题
- 【语音处理】用于音频盲源分离的谐波矢量分析 (HVA)(Matlab代码实现)
- ajaxpro简单调用
- 犯我手游者,必查诛之 - 腾讯WeTest与开发者共筑“手游安全长城
- 3DMark Vantage