【Bp2Lua】深入理解蓝图

news2024/11/15 8:59:36

【Bp2Lua】深入理解蓝图

做 Bp2Lua 过程中的副产物,蓝图在连连看背后隐含的操作

有几点想说明的

  1. 蓝图会隐含一些操作,前端节点图是看不出来的,但是后端字节码会一览无余
  2. Bp2Lua 本质是 字节码 ToLua,其实 Bp2Lua 根本不关心也不知道前端是蓝图
  3. 通过 Bp2Lua 反推来理解 蓝图的行为

大纲

分两部分,先讲讲蓝图的本质,然后列举我收集到的一些隐含操作

蓝图的本质

蓝图的本质是对引擎的可视化

分为两部分

  1. 数据结构:以反射为核心的对象模型,扩展出众多引擎类
  2. 函数:一般的 VM 执行,实际还是在 UObject 实现的,没有 VM 类

所以重点还是对象模型

基类,Asset 里的 Blueprint Class,即 UBlueprint 类,对应 UClass

然后扩展出子类,并且某些类可以特化出编辑器,比如 UMG,AnimBP 状态机

在这里插入图片描述

和一般的脚本(Lua)不同,蓝图的前端就是整个蓝图编辑器

  1. 编译,蓝图必须编译成 UClass
  2. EventGraph,多个 EventGraph 编译成一个 UberGraph
  3. 函数列表,UFunction
  4. 属性列表,UProperty
  5. 节点图,蓝图函数体编译到字节码,存在 UFunction.Code
  6. 细节面板,略

在这里插入图片描述

蓝图的执行流和数据流

白色的线是执行流/控制流,顺序执行,Sequence,Branch,ForLoop,回调函数
在这里插入图片描述

引脚和彩色线是数据流,对应参数,变量,颜色代表数据类型

在这里插入图片描述

设置 Replicated 变量

蓝图

在这里插入图片描述

生成 Lua

在这里插入图片描述

节点可以生成更多节点,红圈是节点额外生成的代码,处理网络属性同步

在这里插入图片描述

隐含的 Cast

这里隐含生成了一条 Double2Float Cast 指令
在这里插入图片描述

调用 Interface

Target 先 DynamicCast 到 Interface 需要的类型,Cast 成功再调用,否则忽略

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

纯函数

纯函数连出来的线,每一条都会重新算一次

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

策略模式(strategy pattern)

背景 一、一个具体实现范例的逐步重构 补血道具(药品):a) 补血丹:补充200点生命值;b) 大还丹:补充300点生命值;c) 守护丹:补充500点生命值将Fighter,F_Warrior,F_Mage 单独写在一个文件中。 Fighter.h …

一步一步学爬虫(4)数据存储之文本存储

一步一步学爬虫(4)数据存储之文本存储4.1 TXT纯文本文件存储4.1.1 本节目标4.1.2 基本实例4.1.3 打开方式4.1.4 简化写法4.1 TXT纯文本文件存储 将数据保存到 TXT 文本的操作非常简单,而且 TXT 文本几乎兼容任何平台,但是这有个缺…

Spark环境搭建(Hadoop YARN模式)

前言 按照前面环境部署中所学习的,如果我们想要一个稳定的生产Spark环境,那么最优的选择就是构建:HA StandAlone集 群。 不过在企业中, 服务器的资源总是紧张的,许多企业不管做什么业务,都基本上会有Hadoo…

AD软件绘制不规则焊盘的器件封装

网上有很多关于AD软件绘制不规则焊盘的帖子,搜了一些帖子看了一下,感觉不太对。严格意义上AD软件是不能绘制不规则的焊盘的,至少目前用的AD软件不支持。为什么这么说呢? 我提一个需求:假如我在PCB文件中需要随意的添加…

企业选择SOP作业指导书系统的目的和意义

SOP是将作业指导流程予以说明规范,让作业人员有一个标准的作业准则,以达到作业的标准一致性。也是一种管理模式,通过对过程的标准化操作,减少和预防差错和不良后果的发生。通过动作的解析、比较、分析,循环作业分析等输…

MIT6.830-2022-lab4实验思路详细讲解

目录前言一、实验概览Exercise 1:Granting LocksExercise 2:Lock LifetimeExercise 3:Implementing NO STEALExercise 4:TransactionsExercise 5:Deadlocks and Aborts总结 && Debug记录前言 到lab4事务,这一块应该是数据库中概念比较多&#x…

2022/12/30总结

今日学习了二叉树有关知识。 二叉树 二叉树通俗来讲就是一个有俩个指针的链表。他们大多长这个样子: 这里还有俩个概念了,二叉树分为完全二叉树和满二叉树 上面所说的是满二叉树,顾名思义就是每个父节点都相应的有俩个指针,通常…

基于springboot+Vue的宿舍管理系统前后端分离(程序+详细文档+数据库)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

前端devops——利用gitlab实现CI/CD自动化部署

目录 前言 一、前期准备 1、开启虚拟服务 2、下载并安装docker 二、开始部署 1、安装gitlab 2、修改默认账号登录密码 3、修改项目clone地址 三、Gitlab CI/CD 1、安装并运行gitlab-runner 2、执行runner 3、将项目注册到gitlab-runner 1、获取token 2、执行注册 …

ETL数据清洗

大多数据仓库的数据架构可以概括为: 数据源-->ODS(操作型数据存储)-->DW-->DM(data mart) ETL贯穿其各个环节。 ​一、数据抽取: 可以理解为是把源数据的数据抽取到ODS或者DW中。 1. 源数据类型: 关系型数据库,如Or…

多模态串讲(上)

多模态的学习在最近几年异常火爆,除了普通的多模态学习,比如视觉问答,图文检索等,其实之前讲的所有这种Language Guided Detection,或者Language Guided Segmentation,这些任务都是多模态的,还有最近火的文…

SpringCloud之负载均衡Ribbon

1.Ribbon是什么? •Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。 •Ribbon主要有两个功能: 1.简化远程调用 2.提供客户端的软件负载均衡算法 Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等…

ERA5数据不同下载方法

ERA5数据不同下载方法1 ERA5简介2 ERA5下载的三种方法2.1 方法1:GEE下载2.2 方法2:官方网站下载2.3 方法3:通过Python脚本下载(以Linux系统为例)总结参考1 ERA5简介 ERA5是ECMWF对全球气候的第五代大气再分析。再分析…

ArcGIS基础实验操作100例--实验17按条件计算属性字段值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验17 按条件计算属性字段值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

工业远程I/O模块CANopen I/O模块 安装接线说明

1)外观尺寸 DIN35mm Rail标准导轨支架外观与尺寸: 2)面板说明 指示灯说明运行指示灯 绿色预留预留错误指示灯 红色CANopen地址设置开关,CANopen 通讯速率设置开关,当 0表示通信速率为10Kbps 4表示通信速率为250Kbps 1表…

Linux | 内存 | 由内存页不足(page allocation failure)引起程序杀死(OOM Killer)

本文对由于 page allocation failure 而引起 Out of Memory Killer 的背景及工作原理进行不完全总结。 更新:2022 / 12 / 30 文章目录触发条件__alloc_pages_slowpath()__vmalloc_area_node()__vmalloc_node_range工作原理结合实例1.2.GFP_ATOMIC 和 __GFP_COMP&am…

阿里云弹性预测 AHPA:助力厨芯科技降本增效

作者:李鹏(元毅) “使用阿里云弹性预测 AHPA,降低了 K8s 容器成本,同时减轻了运维工作量,加速了业务容器化的进程。”—— 朱晏(厨芯科技VP) 背景 厨芯科技,是全球领先的餐饮设备和服务提供商…

TCP 的报头结构 和 三次握手---详解(看完必会)

TCP 的三次握手: 在搞懂三次握手前,必须要搞明白TCP报头的结构内容 TCP报头结构: 源端口号 : 源计算机上的应用程序的端口号;目的端口号 : 目标计算机的应用程序端口号;序列号:客户端给服务端发送数据时…

React 配置文件(二) 配置环境变量

开发环境一般分为: UAT(测试环境) PRE(预上线环境) PROD(生产环境) 所以本地开发分别搭建相对应环境 2.安装 dotenv 3.在package.json文件中配置环境 "scripts": { "start": "react-app-rewired start", "uat": "dotenv…

【Linux】文件系统与inode

一、文件系统 理解文件系统前首先我们要来先了解一下磁盘结构。 接下来我们看看以水平、垂直角度来看看磁盘结构,并将其区域进行划分。 磁盘的垂直分布 (此图最上面的一面和最下面的一面无磁头,则不存储数据): 磁头数:磁头就是在…