UE4 C++学习 浅析UProperty属性说明符

news/2024/5/17 8:38:25/文章来源:https://www.cnblogs.com/CatSevenMillion/p/16637347.html

本文就 UProperty是什么?以及UProperty怎么用?做一个简单的总结。

什么是UPROPERTY?

首先看下官方的解释:

 

 

感觉还是比较模糊没看懂有什么用,我们接着往下看

 

要知道UPROPERTY有什么用,我们首先要知道反射(Refection)这个机制。这个机制在Java和C#等语言都是存在的,但是C++语言本身没有,所以UE4才有引入一些功能(例如UPROPERTY)用来实现反射。

 

我们先看看其他语言中对于反射的定义是什么:

反射就是在运行状态中

1.对于任意一个类,都能够知道这个类的所有属性和方法;

2.对于任意一个对象,都能够调用它的任意一个属性和方法;

即可以动态的获取信息以及调用对象的方法称之为反射机制

 

所以在UE4中,当我们使用反射机制,就可以对于一个类(UClass),我们可以获得这个类的所有属性和方法,而对于一个类对象(UObject),我们可以调用它所拥有的方法和属性

反射C++代码是由Unreal Build Tool和Unreal Header Tool产生的,但由于我们本文不深入探讨UE4的反射机制原理,所以到这里我们只要知道反射机制是什么就可以了。

 

怎么使用UPROPERTY?

还是先来看看官方解释:

这里有一个重要的变量叫做属性说明符。他的作用官方说的很清楚,就是用来控制属性以及引擎的部分功能的。

那么有哪些属性说明符呢?我们可以在UE的官方文档中找到,如图红色框部分的就是属性说明符,链接给在图下了。

文档:Unreal Engine UProperty Specifiers | 虚幻引擎5.0文档

现在我们以及知道了UPROPERTY有什么用了,下面会给出几个代码的例子让我来更加清楚的了解它的功能。

 例子全部来自于 All UPROPERTY Specifiers · ben🌱ui (benui.ca),且本文只对其编辑器部分进行翻译说明,想要看原文或者更多功能的可以直接访问这个网站。

 

注:标记不区分大小写,但为了可读性,我建议坚持使用这里的大小写示例。

如果值没有空格,则引号是可选的。例如:someBool=“true”与someboo=“true”相同。同样,为了可读性,我建议仅在字符串类型属性周围使用引号。

 

注:带有Edit的说明符和带有Visible的说明符都是不兼容,二者只能选择一个作为说明符。

 

1.VisibleAnywhere

标记为VisibleAnywhere的属性在地图中蓝图资产的详细信息面板和蓝图实例的详细信息窗格中都可见

指示此属性在所有属性窗口中可见,但无法编辑。此说明符与“编辑”说明符不兼容

效果:

图中右下角的是地图蓝图的资产面板,左边打开的是蓝图实例的详细信息窗格,二者针对后面的一些关键字使用会有些许不同,要注意区分。

 

 

 我们可以看到,在两个窗口里面我们都可以看得见VisibleAnywhereNumber这个变量,但是都是不可编辑的。

还有要注意的点,虽然在详细面板都有这两个变量,但是在蓝图中我们依然是找不到这个变量的。

 

 

 

想要在蓝图中找到这个变量,我们需要使用BlueprintReadOnly这个属性符

就像这样子:

 

 

 效果:

 

 

 此效果都需要使用,后面会再次说明其他关于Blueprint的说明符

2.VisibleDefaultsOnly

"Defaults" 的意思是这个资产就会在蓝图中被显示(例如:你Content中的BP_Cat),但是不会在实例中显示(例如:地图中的Cat)。

我们在使用这个说明符的常用情况是:当你仅仅想把某些资产使用C++来进行编辑和修改,但是不希望使用蓝图的人员对他进行修改。这实际上是一种使属性可见但只读的方法。

例子:

 

 

 注意看红框处,在蓝图中我们可以看到,但是不可写,但是在世界编辑器中,我们连看都看不到VisibleDefault这个值。

 

3.VisibleInstanceOnly

此资产仅仅对于那些存在与地图中的实例的蓝图可见。(不光要创建,还要对蓝图的例子进行实例化,在实例化中的蓝图才会可见这些资产)

这是一个很少使用的可见性说明符,但您可以使用它向Blueprint用户显示在C++中定义的或基于其他属性计算的属性值。

ps:嗯。。很少用的说明符我就不把详细使用发出来了,后续同理,有兴趣的小伙伴自己去上面给的链接进行查看。

 

4.EditAnywhere

EditAnywhere属性的值可以在蓝图的“详细信息”面板和蓝图实例的“详细资料”面板中更改。 
 

 

 效果:

 

 

 我们可以看到,在两个地方都是可以被查询到并且是可更改的。

5.EditInstanceOnly

你可以想要一个资产使用EditinstanceOnly当它在蓝图资产中的默认值没有意义。

例如:一个ATrigger的actor指向一个ADoor实例,并且想告诉这个实例当ATrigger被触发时去进行开门操作。在这个例子里面我们希望TArray<ADoor*>没有意义并且可以被编辑,所以我们要使用EditInstanceOnly。

 

 

6.EditDefaultsOnly

与VisbleDefaultsOnly一样。"Defaults" 的意思是这个资产就会在蓝图中可编辑(例如:你Content中的BP_Cat),但是不会在实例中可编辑(例如:地图中的Cat)。

 

7.ShowOnlyInnerProperties

当您希望避免用户单击以展开结构时非常有用。

例如当它是外部类中的唯一对象时。由结构属性使用。指示内部属性不会显示在可展开结构中,而是提升到一个级别。

使用:

USTRUCT()
struct FCat
{GENERATED_BODY()UPROPERTY(EditDefaultsOnly)FString Name;UPROPERTY(EditDefaultsOnly)int32 Age;UPROPERTY(EditDefaultsOnly)FLinearColor Color;
};
// ...
UPROPERTY(EditAnywhere, Category="Cat Without ShowOnlyInnerProperties")
FCat Cat;
UPROPERTY(EditAnywhere, Category="Cat With ShowOnlyInnerProperties", meta=(ShowOnlyInnerProperties))
FCat Cat;

 

 

8.Category="xxxx"

使用 Category, 可以将属性分组到可展开的文件夹中. 管道字符" | "可以用来创建子文件夹. 例如: Category="Character Info | Health" 会为我们创建两个目录:“ Character Info",以及 前者的子目录" Health"

如果在使用BlueprintReadOnly 或者使用 BlueprintReadWrite时同时使用他们,那么你可以在蓝图中通过类别名来找到他们

注意有没有加空格是非常重要的; 如果这又两个资产分别是Category="Parent|Child"和Category="Parent | Child",那么返回结果的时候会有两个结果。

例子1:

 例子2:

例子3:

 

 

9.DisplayName=“xxx”

更改与属性一起使用的文本标签。这在“详细信息”面板和中使用

当存在不需要向用户显示的仅限内部程序员的技术术语时非常有用。

例子:

 

  

 

10.ToolTip="abc"

 当鼠标悬停到资产上时会提示ToolTip上的信息

例子:

剩下的还有一些很少使用的,关于编辑器的设置的就不再赘述了,想要查询都可以到上面的网站。

 

参考链接:

UE4反射机制 - 知乎 (zhihu.com)

All UPROPERTY Specifiers · ben🌱ui (benui.ca)

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

freeswitch的3XX重定向

概述 sip协议标准RFC3261中,对3XX重定向有明确的定义。 freeswitch中如何使用3XX redirect的特性,如何落地,应用场景有哪些?环境 centos:CentOS release 7.0 (Final)或以上版本 freeswitch:v1.8.7 GCC:4.8.53XX重定向 RFC3261中对3XX的响应定义是这样的。 3xx response…

版本4校园兼职软件遇到的问题和解决方法

出现问题&#xff1a; 每次只能保存一位用户信息&#xff0c;后面输入用户信息前面的用户信息会被覆盖 出现原因及解决方法&#xff1a; 因为暂存的temp对象被定义为全局变量&#xff0c;所以每次进去都被刷新为新对象&#xff0c;将其 User temp new User(); 放在方法内即…

【JAVAWEB开发】基于Java+Servlet+Ajax+jsp网上购物系统设计实现

哈喽~大家好呀&#xff0c;这篇给的大家带来的是网上购物系统设计。在传统电商时代&#xff0c;用户是先有需求再购买&#xff0c;用户对平台较为依赖&#xff0c;商家对消费者很难有直接的影响力&#xff0c;而如今社交 电商解决了产品质量的信息不对称问题&#xff0c;电商已…

卷积神经网络卷积层公式,卷积神经网络层数计算

卷积神经网络算法是什么&#xff1f; 一维构筑、二维构筑、全卷积构筑。 卷积神经网络&#xff08;ConvolutionalNeuralNetworks,CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff08;FeedforwardNeuralNetworks&#xff09;&#xff0c;是深度学习&a…

【校招VIP】[产品][一本][6分]简历原则上写一页

校招的简历原则上只能写一页,尤其是电子版。因为校招是集中面试,会有太多简历,所有人都只有一页的话,写两页的很容易被漏掉一页关注【校招VIP】公众号,回复【简历】,添加校招顾问微信,即可获取简历指导! 简历背景:21届一本产品 简历评分:6分 一、学员简历 ​​​二、…

安装mkimage工具,解决报错“Invalid CPU Type - valid names are:”

问题 前两天在编译博雅芯片厂商提供的内核时&#xff0c;总是无法编译通过&#xff0c;试了好几次都提示如下错误&#xff1a; Invalid CPU Type - valid names are: alpha, arm, x86, ia64, m68k, microblaze, mips, mips64, nios2, powerpc, ppc, s390, sh, sparc, sparc64…

神经网络架构图讲解教程,神经网络架构图讲解图

什么是全连接神经网络&#xff1f;怎么理解“全连接”&#xff1f; 1、全连接神经网络解析&#xff1a;对n-1层和n层而言&#xff0c;n-1层的任意一个节点&#xff0c;都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候&#xff0c;激活函数的输入是n-1层所有节点的…

猿创征文|C++来时路 _ 重温经典之C++类和对象 | 三大特性之一 - 封装 | 腾讯面试题

&#x1f49b; 前情提要&#x1f49b; 本章节是C的类和对象- 封装的相关知识~ 接下来我们即将进入一个全新的空间&#xff0c;对代码有一个全新的视角~ 以下的内容一定会让你对C有一个颠覆性的认识哦&#xff01;&#xff01;&#xff01; 以下内容干货满满&#xff0c;跟上…

【自然语言处理(NLP)】基于ERNIE语言模型的文本语义匹配

【自然语言处理&#xff08;NLP&#xff09;】基于ERNIE语言模型的文本语义匹配 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云星级博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全…

GD32单片机使用Jlink在SWD无法下载和仿真

1. SWD引脚锁解方法1 https://developer.arm.com/documentation/101455/0100/Setup-ULINK2/Configure-uVision-for-Debugging/Cortex-M-Debugging/Debug-Driver-Configuration/Debug 拉低RST引脚&#xff0c;修改SW速率&#xff0c;即使用在MCU复位状态下&#xff0c;通过SWD…

江西涉农县开展一对一指导服务 国稻种芯:重点保障水稻生长

江西涉农县开展一对一指导服务 国稻种芯&#xff1a;重点保障水稻生长 时代周报 王晨婷 邓宇晨 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国稻种芯中国水稻网 中国三农智库网-功能性农业农业大健康大会报道 万赢信采编&#xff1a;8月27日&#xff0c;接连几周高温之…

计算机毕业设计django基于python鲜花培育专家系统 (源码+系统+mysql数据库+Lw文档)

项目介绍 在各学校的教学过程中&#xff0c;鲜花培育专家管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的可以鲜花培育专家技术学习的平台&#xf…

14天刷爆LeetCode算法学习计划——Day04 双指针(2)

Day04——双指针一、前言二、知识点三、LeetCode557. 反转字符串中的单词 III1.题目2.解题思路3.注意事项4.代码实现5.验证代码6.其它解法&#xff08;来自力扣&#xff09;1️⃣使用额外空间2️⃣借助StringBulider四、结语一、前言 盲目刷题只会让自己心态爆炸&#xff0c;所…

WiFi信号感知精度

WiFi信号感知极限&#xff1a; 对5GHz的WiFi&#xff0c;其波长λ\lambdaλ在5.7厘米左右&#xff0c;根据上图理论模型&#xff0c;当目标的位移导致的反射路径长度变化超过5.7厘米时&#xff0c;动态向量可以旋转超过一周&#xff0c;产生一个完整的正弦信号&#xff1b;当发…

弱口令(Weak Password)总结和爆破工具

文章目录弱口令定义弱口令字典通过社工定制字典库弱口令字典爆破工具超级弱口令检查工具水影-域信息收集WebCrackBurpSuite的intruder模块hydra弱口令定义 网站管理、运营人员由于安全意识不足&#xff0c;为了方便、避免忘记密码等&#xff0c;使用了非常容易记住的密码&…

Windows 硬盘分区整数大小计算

在线计算器参考 硬盘整数分区计算器在线工具 (NTFS/FAT32) Excel计算公式&#xff1a;

SpringBoot - 配置文件application.yml使用详解

什么是YAML SpringBoot - YAML使用详解 写在前面 &#xff08;1&#xff09;YAML 是 JSON 的超集&#xff0c;简洁而强大&#xff0c;专门用来书写配置文件的语言&#xff0c;可以替代 *.properties。 &#xff08;2&#xff09;在创建SpringBoot框架的项目时&#xff0c;引…

基于STM32和LD3320的智能语音识别柔光台灯设计

目录标题基于STM32智能语音识别柔光台灯设计设计说明原理图系统各模块器件介绍LD3320语音识别模块OLED显示模块PCB图源程序程序设计框架程序流程图主函数OLED程序设计说明书立论依据文献综述研究内容研究基础毕业设计&#xff1a; 基于STM32智能语音识别柔光台灯设计 &#x…

详解模板引擎二

详解模板引擎二引入问题一、什么是 ServletContext1. 理解 ServletContext2. 提出问题3. ServletContext 对象的重要方法二、代码示例&#xff1a;多个 Servlet 共享数据1. WriterServlet 类2. ReaderServlet 类展示结果展示结果1展示结果2展示结果3分析代码三、提出问题四、什…

springboot呼伦贝尔旅游网站的设计与实现毕业设计源码091833

目 录 摘要 1 绪论 1.1研究意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2呼伦贝尔旅游网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功…