观察UE4中引用查看器(ReferenceViewer)是从哪得到数据的

news2024/11/9 5:12:13

前言

引用查看器(ReferenceViewer)可以显示资源引用关系数据,我想要知道这个数据是如何得到的。因此从它的界面代码开始一步步往里看。

(到最后才发现,得到引用关系数据的接口很简单,而且是蓝图可访问的,详见本篇的【使用蓝图接口获得引用关系数据】部分)

1. 界面的代码

右键资源点 Reference Viewer 可以查看其引用关系
在这里插入图片描述
它所引用的,和引用它的,都可以看到:
在这里插入图片描述
首先,我想要找到这里Slate界面的代码。
我尝试全局搜索“ReferenceViewer”(可以用 Everything 工具来搜索),幸运的是直接找到了文件 “SReferenceViewer.h”。路径:
Engine\Plugins\Editor\AssetManagerEditor\Source\AssetManagerEditor\Private\ReferenceViewer\SReferenceViewer.h

为了验证,可以在这里下断点,可以看到每次打开引用查看器都会走到这里:
在这里插入图片描述

2. 创建节点的逻辑

ReferenceViewer相关的代码文件并不多。
回想之前学习UE节点图表编辑器的基本概念可直接找到几个最感兴趣的内容:
在这里插入图片描述
UEdGraph_ReferenceViewer代表了这个网络图
UEdGraphNode_Reference代表了其中的一个节点的数据。
SReferenceNode包含了节点的界面相关的内容。

因此,只要在UEdGraphNode_Reference的构造函数中下断点,就可以捕捉到每次创建新节点的堆栈。
在这里插入图片描述

对于这个测试的资源而讲,由于有三个节点,所以显然创建了三次。
这三次都从 UEdGraph_ReferenceViewer::ConstructNodes 中进入:
在这里插入图片描述
首先是创建根节点(这里是这个立方体StaticMesh)
然后是创建引用它的节点(这里是摆放它的关卡)
最后是它所引用的节点(这里是它的材质)

调用RecursivelyConstructNodes函数的bReferencers参数代表了是“引用它的”还是“它所引用的”。这点从后续它所影响的创建节点的位置也可以看出:
在这里插入图片描述

3. 得到引用关系数据的逻辑

RecursivelyConstructNodes函数的名字也可以看出,他的形式是递归的。
而本轮调用时给定的参数Identifiers,其实就是上一轮的Referencers(准确来说是Referencers这个map的key)
在这里插入图片描述
比如这里的Identifiers是立方体StaticMesh,而Referencers是它的材质。
在这里插入图片描述
那么如何得到Referencers就是关键。

可以调试出,它在GetSortedLinks这个函数中被赋予了值:
在这里插入图片描述

继续进入GetSortedLinks,可以看到最终它使用了AssetRegistry.GetReferencersAssetRegistry.GetDependencies来获得引用数据关系。
在这里插入图片描述

使用蓝图接口获得引用关系数据

其实,这两个接口直接用蓝图就可以调用。

获得这个资源有谁在引用它:
在这里插入图片描述
我这里将会输出:

/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap

获得这个资源在引用谁:
在这里插入图片描述
我这里将会输出:

/Game/Geometry/Meshes/CubeMaterial

如果用Python,则代码如下:

#获得AssetRegistry
ar = unreal.AssetRegistryHelpers.get_asset_registry()
#选项(一会儿调用接口时用到)
option = unreal.AssetRegistryDependencyOptions()
#谁引用它:
refs = ar.get_referencers("/Game/Geometry/Meshes/1M_Cube",option)
print(refs)
#它引用谁:
refs = ar.get_dependencies("/Game/Geometry/Meshes/1M_Cube",option)
print(refs)

输出:

LogPython: ["/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap"]
LogPython: ["/Game/Geometry/Meshes/CubeMaterial"]

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

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

相关文章

冬至已至,你的在职读研2023能在社科院与杜兰大学金融管理硕士项目实现吗

杜甫《小至》中写道“天时人事日相催,冬至阳生春又来”。不知不觉间冬至悄然到来,过完冬至天气日渐回暖,春天即将回来了。时光总是匆匆而逝,一晃2022年将要与我们说再见了。这一年来,反复无常的疫情,瞬息万…

【学习笔记】JDK源码学习之HashTable(附带面试题)

【学习笔记】JDK源码学习之HashTable(附带面试题) 其他好文: 【学习笔记】JDK源码学习之LinkedHashMap(附带面试题【学习笔记】JDK源码学习之HashMap(附带面试题)【学习笔记】JDK源码学习之Vector(附带面试题&#x…

OpenCV基础入门

主要了解包括 opencv 的下载和环境配置opencv目录的了解opencv中highgui模块opencv中core模块opencv中imgproc模块opencv中feature2d模块opencv视频操作 1.OpenCV简介 图像是人类视觉的基础,是自然景物的客观反映。 模拟图像通过某种物理量的强弱变化来记录图像…

中小企业远程办公指南:10分钟搭建,即插即用

不装了 我成小阳人了 虽然还没算过来人,但是想要提醒一下小伙伴“能不阳就别阳”,“能晚阳就晚阳”! 真的很痛很难受。 为了应对即将到来的高峰,我们在上周末紧急采取了远程居家办公模式。 不得不说,公司应对突发情…

彻底卸载2345王牌输入法的方法

2345王牌输入法是2345公司旗下一款中文输入法软件,主打纯净输入,有用户用了一段时间觉得不太习惯,就想卸载装别的软件,但是发现怎么也卸不掉,下面小编就给大家介绍彻底卸载2345王牌输入法的方法。 方法一:使…

线性代数 --- Gauss消元的部分主元法和完全主元法(补充)

Gauss消元的部分主元法和完全主元法(补充) 本文主要是对下文的补充,而补充的主要内容就是如何直接求出(手动)部分主元法的P矩阵和L矩阵: 线性代数 --- Gauss消元的部分主元法和完全主元法_松下J27的博客-CSDN博客_高斯消元的主元是什么Gauss消元的部分主…

MyBatisPlus ---- MyBatis-Plus简介

MyBatisPlus ---- MyBatis-Plus简介1. 简介2. 特性3. 支持数据库4. 框架结构1. 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景: 我们的…

艾美捷内皮血管生成检测试剂盒的多种特点

血管生成(Angiogenesis)是指源于已存在的毛细血管和毛细血管后微静脉的新的毛细血管性血管的生长。内皮血管生成是一个极其复杂的过程。通常新生血管是在原有的血管基础上延伸扩展而形成的,其过程类似于典型的伤口愈合和胚胎形成过程。在血管…

RK3568下载SDK编译源码

前面我们已经搭建好了编译一个环境https://blog.csdn.net/qq_24093081/article/details/128394606 所以在这里我们就需要下载瑞芯微提供的SDK进行编译,由于RK3568支持多种系统,比如Android11,Linux(debian、Ubuntu、buildroot、yo…

TCP网络编程

1. 网络相关概念 网络通信:两台设备之间通过网络实现数据传输;java.net包下提供了一系列的类或接口,完成网络通信; 局域网:覆盖一个学校、单位、公司; 城域网:覆盖一个城市; 广域网…

力扣(15.18)补9.19

15.三数之和 我以为不会太难,md不会。 其实很让我惊讶的是,双指针用了2层循环但复杂度确是O(n)。牛🐮🐮🐮🐮🐮🐮🐮🐮🐮&am…

自动控制原理笔记-结构图及其等效变换

目录 结构图: 得到系统结构图的两种方式 : 方框图画结构图: 微分方程组画结构图: 结构图等效变换规则: 结构图的化简: 小结: 结构图: 得到系统结构图的两种方式 &#xff1a…

WebMagic

1.介绍 WebMagic是一款简单灵活的爬虫框架。基于它你可以很容易的编写一个爬虫。 WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务。这意味着,在WebMag…

K8S——存储ConfigMap

configMap描述信息 ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。 ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保…

hutool工具并发使用 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) 的坑

目录问题描述解决方案Sftp(sshHost, sshPort, sshUser, sshPass) 分析Sftp(Session session) 分析吐槽另外还有一坑 delFile(String filePath)问题描述 看到前人的代码中使用 Sftp sftp new Sftp(sshHost, sshPort, sshUser, sshPass) ; 来创建一个Sftp客户端,然后…

Automatic Exposure Correction of Consumer Photographs 分析

文章目录Automatic Exposure Correction of Consumer Photographs1. 图像分割2. 按灰度区域合并3. 根据细节多少和各zone相对对比度约束,求解每个zone对应的 最优zone.4. 每个zone以及对应的最有zone找到之后,可以求解多项式curve的 ϕs\phi_sϕs​ 和 ϕ…

【Flask框架】——24 创建ROM映射

创建ROM映射 ORM:Object Relationship Mapping 创建一个类,一个类对应了一个数据库中的一张表,类的数据属性对应了表中的字段名,这个类称为映射类。 根据映射类创建出一个一个的对象,每个对象对应了表中的一条实际的…

函数(6)

目录 1、函数是什么? 2、C语言中函数的分类: 1、库函数 2、自定义函数 3、函数的参数 4、函数的调用 5、练习 1、打印100~200之间的素数 2、打印100~200之间的闰年 3、写一个函数,实现一个整形有序数组的二分查找 6、函数的嵌套调…

CSDN每日一练求最小元素 C语言

题目名称:求最小元素 时间限制:1000ms内存限制:256M 题目描述 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). Find the minimum…

MS17-010漏洞攻击与防御(利用永恒之蓝攻击Win7系统)

任务1 利用永恒之蓝攻击Win7系统 在Kali终端中输入命令“msfconsole ”,启动Metasploit;输入命令“use auxiliary/scanner/smb/smb_ms17_010”,加载扫描模块;输入命令“set RHOSTS 192.168.0.6”,设置需要被扫描的目标…