【UnLua】深入理解 UnLua

news2024/11/15 10:57:02

【UnLua】深入理解 UnLua

从 UnLua 框架层面讨论真正值得关注的关键点

  1. UnLua 架构
  2. UnLua 内存管理
  3. UnLua 性能

大纲

  1. UnLua 静态导出
  2. UnLua 架构
  3. UnLua 内存管理
  4. UnLua 性能

静态导出

静态导出,这是标准的 Lua 用法,已经非常完善了,就一种标准做法

简单过一遍,之后的章节不再讨论静态导出

Case Study:Cocos Lua

以 Cocos Lua 为例,架构如下图:

  1. 跑 binding-generator 工具,用 clang 扫描 C++ 源码,自动生成 Lua Binding C++ 代码
  2. Lua Binding 代码 和引擎 C++ 一起编译
  3. 运行时 加载 Lua Binding,即把 引擎 C++ API 注册给 Lua 调用

可以理解为 Lua Binding 层 也是一种反射层,笔者自己写玩具引擎早期就是直接拿 Lua 当作反射层来动态调用 C++

在这里插入图片描述

UnLua 静态导出

  1. 目前只有手工静态导出这条路,自动生成可以有,但没必要
  2. 引擎里不支持反射的类型,只能通过静态导出来提供给 Lua 调用

UnLua 架构

接下来我们讨论基于一般实践 Common Case,忽略其他链路

UnLua Runtime 架构 如下图:

  1. 反射层是核心
  2. BP 和 UnLua 通过 反射层 和 UE 通信
  3. BP 定义了 UClass 的结构,包括 UFunction 和 UProperty 的集合
  4. UnLua 监听 UObject 的创建销毁,如果 UClass 绑定了 UnLua(实现了 UnLuaInterface),则换掉 UFunction 调用,走 UnLua 调用 Lua 函数
  5. Lua 代码中 调用 UE C++ API,通过 UnLua 走 UE 反射层去调用

在这里插入图片描述

Lua Call UE 的调用链路,如下图:

接下来我们结合实际例程来理解

在这里插入图片描述

Case Study:Delay

调用 Delay 背后发生了什么?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

UnLua 内存管理

UE 内存管理 + Lua 内存管理

UnLua 性能

  1. GC,尤其是 struct,Vector3 数学类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qemu virtio设备模拟与初始化流程

文章目录VirtIO设备模拟及初始化流程Virtio设备的创建参数解析virtio 设备初始化流程pci_bus_matchpci_match_devicepci_device_probevirtio_pci_proberegister_virtio_devicevirtio_dev_matchvirtio_dev_probe参考VirtIO设备模拟及初始化流程 qemu设备虚拟机化的路线可以概括…

C++之智能指针

文章目录一、为什么需要智能指针?二、智能指针的使用及原理1. RAII2.智能指针的原理3. auto_ptr4. unique_ptr5. shared_ptr6. weak_ptr7.删除器一、为什么需要智能指针? 如果在 div() 输入的 b 0,那么就会抛出一个异常,被 main…

Redis面试题总结

一、Redis概述 1.什么是Redis? Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string、list、set、zset(sorted set --有序集合)和hash。这些数据结构都支持push/pop、add/remove及取交集并集和…

[程序设计]-基于人工智能博弈树,极大极小(Minimax)搜索算法并使用Alpha-Beta剪枝算法优化实现的可人机博弈的AI智能五子棋游戏。

绪论-五子棋的特点与规则 五子棋是两方之间进行的竞技活动,专用棋盘为15*15,五连子的方向为横、竖、斜;任一方在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个(含五个以上)时即为该方胜利;在棋盘上以…

Intel OneApi Developer Tools

“英特尔OneApi开发人员工具”是一组工具和库,用于为Internet发布的各种处理建筑开发高速应用程序。oneAPI是一个完全开放的编写程序模型,支持具有不同架构的各种制造商。使用此工具,其他开发人员需要为每个架构师使用特定的代码,…

【小程序】视图与逻辑

文章目录页面导航声明式导航编程式导航导航传参页面事件下拉刷新事件上拉触底事件生命周期WXS 脚本wxs 和 JavaScript 的关系基础语法页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现页面导航的方式有如下两种&#xff1a; ① <a> 链接② lo…

前端工程师leetcode算法面试必备-二叉树的构造和遍历

一、前言 上一篇中介绍了如何采用 DFS 和 BFS 的搜索思想去实现二叉树的前序遍历、中序遍历、后序遍历以及分层遍历。 这一节主要介绍 Medium 难度中比较常见的一种题型&#xff1a;根据各种遍历构造二叉树。 二、1008. 先序遍历构造二叉树 返回与给定先序遍历 preorder 相匹…

2022阅读数据分析报告

零、前言 晃晃悠悠,又至年尾。翻阅新的书籍五十有余,得到读书和樊登讲书,累计或许在千余小时,或跑步,或骑行,或徒步,偶或地铁,都做耳旁音。回首年初扶起的flag,细思存量不存质。暂且延续2021年的阅读记录方式1,简单可视化本年阅读数据,收尾第二年的阅读小结。 图1 年…

WeNet开源社区介绍

本文是由张彬彬在第二届SH语音技术研讨会和第七届Kaldi技术交流会上对WeNet开源社区的一些工作上的整理&#xff0c;内容涵盖了 WeNet 的最新进展、新项目WeKws&#xff0c;WeSpeeker和WeTextProcessing的介绍&#xff0c;以及去年发布的两个数据集Opencpop和WenetSpeech在今年…

11矩阵空间、秩1矩阵

矩阵空间 知识概要 ​ 从矩阵空 间谈起&#xff0c;介绍矩阵空间的维数&#xff0c;基等问题。渗透一些微分方程与线性代数之间的 联系&#xff0c;并介绍秩为 1 的矩阵特点。 矩阵空间 对角阵D不是很理解。 &#xff08;1&#xff09;基与维数 再看对角阵 D&#xff0c;明…

Hudi学习03 -- Spark操作hudi(Spark-shell 和 PySpark)

文章目录Spark环境准备Spark-shell 方式启动命令&#xff0c;需要显示指定一些参数插入数据查询数据时间旅行&#xff08;Time Travel Query&#xff09;更新数据增量查询&#xff08;Incremental query&#xff09;删除数据&#xff08;Delete Data&#xff09;覆盖分区数据&a…

阴道菌群——贯穿女性一生

阴道微生物组是一个复杂而动态的微生态系统&#xff0c;在女性月经周期和女性的一生中不断发生波动。 在过去几年中&#xff0c;对阴道微生物群关注随着测序技术的发展和应用逐渐广泛和突出&#xff0c;有关以往传统正常和异常阴道微生物组的知识也发生了变化。培养技术可能不再…

Bandit算法学习[网站优化]01——Multiarmed Bandit 算法引入

Bandit算法学习[网站优化]01——Multiarmed Bandit 算法引入 参考资料 White J. Bandit algorithms for website optimization[M]. " O’Reilly Media, Inc.", 2013.https://github.com/johnmyleswhite/BanditsBookeasy-rl 一、探索与利用&#xff08;exploration…

Next.js i18n国际化实现方案(支持ReactNode类型、可传参)

前言 抛开Next.js框架不谈&#xff0c;想必其他项目也经常会遇到国际化方案&#xff0c;大概逻辑都是差不多的&#xff0c;只是说这次本人碰巧在Next上的项目有这样的需求&#xff0c;并记录下来。 实现思路&#xff1a; 其实不从代码角度上讲的话&#xff0c;无非是引入一个…

【王道操作系统】3.1.6 分页存储(页号、页偏移量等)

分页存储(页号、页偏移量等) 文章目录分页存储(页号、页偏移量等)1.为什么学习分页存储2.基本分页存储管理的思想3.分页存储管理的重要概念4.如何实现地址的转换4.1 如何计算页号和页偏移量4.2 分页存储的逻辑结构4.3 如何知道页面在内存中的起始地址1.为什么学习分页存储 2.基…

Qt扫盲-QSS语法概述

QSS语法概述一、语法规则二、选择器类型三、子控件四、伪态五、冲突解决六、样式层叠七、样式继承八、含命名空间样式设置九、QObject 属性设置概述&#xff1a;QSS也叫Qt样式表&#xff0c;Qt样式表术语和语法规则几乎与HTML CSS的术语和语法规则相同。如果已经了解CSS&#x…

【Vue2+Element ui通用后台】整体布局、数据展示、axios封装

文章目录Home组件表格Axios封装Home组件 我们新建 Home 组件来展示右侧的内容 整体布局我们使用layout布局&#xff0c;通过基础的 24 分栏&#xff0c;迅速简便地创建布局。由于左侧占比较小&#xff0c;我们分为 8 和 16 即可 然后每个卡片样式的部分&#xff0c;我们使用…

flask session机制

信息收集 主页是一个登陆界面其他按钮点击不了&#xff0c;源代码也没什么东西。 除了admin用户不能直接登陆&#xff0c;其他用户都可以。 打开以后是一个文件上传&#xff0c;然后根据提示只能上传zip文件&#xff0c;我们随便上传一个 我在zip文件里面写了一个/etc/passw…

prometheus监控报警部署Alertmanager

Prometheus将告警分为两个部分&#xff1a;Prometheus 和 Alertmanager。其中Prometheus配置告警触发规则&#xff0c;对指标进行监控和计算&#xff0c;将再将告警信息发送到Alertmanager中。Alertmanager对告警进行管理&#xff0c;比如合并抑制等操作。 wget https://github…

10.移动端笔记-响应式布局

1.响应式开发 原理&#xff1a;使用媒体查询针对不同宽度的设备进行布局和样式设置&#xff0c;从而适配不同的设备 2.响应式布局容器 响应式需要一个父级做为布局容器&#xff0c;配合子级元素实现变化效果 原理&#xff1a;在不同屏幕下&#xff0c;通过媒体查询改变这个…