[UE4]属性声明(Property Declaration)各個宏的定義及作用

2023-11-06 23:31

本文主要是介绍[UE4]属性声明(Property Declaration)各個宏的定義及作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

轉載自:https://www.jianshu.com/p/a86d567be8c3

參考:https://blog.csdn.net/claien/article/details/49358697

 

属性声明(Property Declaration)

属性变量使用标准C ++变量语法声明,通过使用UPROPERTY宏来进行属性声明标记。

UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;

属性修饰符(Property Specifiers)

在声明属性时,声明上可添加修饰符以控制引擎和编辑器针对不属性的展现。

常用

Category

定义属性的分类。

UPROPERTY(Category=CategoryName)
Type VariableName;UPROPERTY(Category="CategoryName|SubCategoryName")
Type VariableName;
UPROPERTY(EditAnywhere, Category = "MyCategory")
int CategoryNum;UPROPERTY(EditAnywhere, Category = "MyCategory|SubCategory")
int SubCategoryNum;

1

 

2

Blueprint~辨析

BlueprintAssignable

仅能用于Multicast代理。
应显示该属性,以供在蓝图中分配。

UPROPERTY(BlueprintAssignable)
Type VariableName;

BlueprintCallable

仅能用于Multicast代理。
应显示该属性,以在蓝图代码中调用。

UPROPERTY(BlueprintCallable)
Type VariableName;

BlueprintReadOnly

这个属性可以通过蓝图读取,但不能修改。
这个操作符与BlueprintReadWrite不兼容。

UPROPERTY(BlueprintReadOnly)
Type VariableName;

BlueprintReadWrite

此属性可以读取或从蓝图写的。
这个操作符与BlueprintReadOnly不兼容。

UPROPERTY(BlueprintReadWrite)
Type VariableName;
[SpecifiersTest.h]
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FStringDelegate, FString, testStr);
...
UPROPERTY(BlueprintAssignable, Category = "Blueprint")
FStringDelegate WriteToLogDelegate;
UFUNCTION(BlueprintCallable, Category = "Blueprint")
void TestAssignable();// 还是有点不太懂这种方式实际场景怎么用
UPROPERTY(BlueprintCallable, Category = "Blueprint")
FStringDelegate WriteToLogCall;UPROPERTY(BlueprintReadOnly, Category = "Blueprint")
int OnlyTime;UPROPERTY(BlueprintReadWrite, Category = "Blueprint")
int WriteTime;[SpecifiersTest.cpp]
void ASpecifiersTest::TestAssignable()
{UE_LOG(SpecifiersTest, Log, TEXT("This is AssignableTest"));if (GEngine)GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("This is AssignableTest!"));
}

1

 

2

event

 

test event

 

play - press w

Edit~辨析

EditAnywhere

表示该属性可从编辑器内的属性窗口编辑,在原型和实例中。

UPROPERTY(EditAnywhere)
Type VariableName;

EditDefaultsOnly

表示该属性可通过属性窗口来编辑,但仅能对原型编辑。

UPROPERTY(EditDefaultsOnly)
Type VariableName;

EditFixedSize

仅限于动态数组,这使得用户不能通过UnrealEd属性窗口来变更数组的长度。

UPROPERTY(EditFixedSize)
Type VariableName;

EditInline

通过此修饰符使得用户可编辑UnrealEd的属性查看器中的变量所引用的对象属性。(仅对对象引用可用,包括对象引用数组)。

UPROPERTY(EditInline)
Type VariableName;
  • EditInline is deprecated.Remove it, or use Instanced instead.

EditInstanceOnly

表示该属性可通过属性窗口来编辑,但仅能对实例而非原型进行编辑。

UPROPERTY(EditInline)
Type VariableName;
UPROPERTY(EditAnywhere, Category = "EditCategory")
int EditAnyNum;UPROPERTY(EditDefaultsOnly, Category = "EditCategory")
int EditDefaultNum;UPROPERTY(EditAnywhere, Category = "EditCategory")
TArray<int32> EditAnyArray;
UPROPERTY(EditAnywhere, EditFixedSize, Category = "EditCategory")
TArray<int32> EditFixedArray;\\ UPROPERTY(EditInline, Category = "EditCategory")
\\ int EditInlineNum;UPROPERTY(EditInstanceOnly, Category = "EditCategory")
int EditInstanceNum;

原型中

 

实例中

Visible~

VisibleAnywhere

表示该属性在属性窗口中可见,但无法被编辑。

UPROPERTY(VisibleAnywhere)
Type VariableName;

VisibleDefaultsOnly

表示该属性仅在原型的属性窗口中可见,且无法被编辑。

UPROPERTY(VisibleDefaultsOnly)
Type VariableName;

VisibleInstanceOnly

表示该属性仅在实例的属性窗口中可见,且无法被编辑。

UPROPERTY(VisibleInstanceOnly)
Type VariableName;
UPROPERTY(VisibleAnywhere, Category = "VisCategory")
int VisAnyNum;UPROPERTY(VisibleDefaultsOnly, Category = "VisCategory")
int VisDefaultNum;UPROPERTY(VisibleInstanceOnly, Category = "VisCategory")
int VisInstanceNum;

原型中

 

实例中

其他

AdvancedDisplay

属性被显示在细节面板的高级下拉框中。

UPROPERTY(EditAnywhere, Category = "Adv")
int AdvNum1;
UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "Adv")
int AdvNum2;

1

2

Const

这个变量是常量,应该导出为常量。
常量特性不会在编辑器修改。

  • 使用的时候报错,不清楚为啥 - Unknown variable specifier 'Const'

Transient

该属性为临时属性;不应被保存,在载入时会被填零。

UPROPERTY(Transient)
Type VariableName;

不懂

  • 一时看不太懂、使用又比较深不常用、需要深入了解的,后续有机会再补充

AssetRegistrySearchable

表明此属性及其值将会为任意将其作为成员变量而包含的资源类示例被自动添加到资源注册中。
不可用于结构体属性或参数。

Config

表示该变量将会成为可配置状态。
当前值可被保存到ini文件中,并且将在创建时被载入;无法在默认属性中被赋值;只读。

DuplicateTransient

表示该变量的值应的任何类型的重复(复制/粘贴,二进制复制等)的过程中被重置为类的默认值。

Export

仅对对象属性(或对象数组)有效。表示当对象被复制(复制/粘贴)或导出到T3D时,被分配给该属性的对象应完全作为子对象区块来导出,而不是仅仅输出对象引用本身。

GlobalConfig

类似于config修饰符,区别是您不能在子类中重载它;无法在默认属性中被赋值; 只读 。

Instanced

仅能用于对象属性。
当此类的实例被创建时,它会被赋予一个默认分配给此变量的对象的独特拷贝;用于对在类默认属性中定义的子对象进行实例化。
类似EditInline和Export修饰符。

Interp

表示该值可由Matinee的浮点或向量属性轨迹来随时间驱动。

Localized

此变量的值将定义本地值;最常用于字符串;只读 。

Native

属性为native:C++代码负责对其序列化并显示给GC。

NoClear

防止该对象引用在编辑器中被设置为None.隐藏编辑器的清除(以及浏览)按钮。

NoExport

仅对native类有效。此变量不应被包含在自动生成的类声明中。

NonTransactional

表示变更为此变量值将不会被包含在编辑器的撤消/重做历史中。

Ref

该值在函数调用后被复制出来。仅在函数参数声明中有效。

Replicated

此变量应通过节点网络进行复制。

ReplicatedUsing

此变量应通过节点网络进行复制,在其接受到 Callback 函数后执行。
使用方法: ReplicatedUsing=FunctionName(函数名称)

RepRetry

仅用于结构体属性。如无法被完全发送,请重试复制此属性(例如,对象引用尚无法通过节点网络来进行序列化)。对于简单引用来说,这是一个默认值,但对结构体来说,由于带宽消耗,很多情况下我们不需要。所以除非此标识被定义,否则其会被禁用。

SaveGame

游戏存档说明一个简单的方法,包括明确的领域为检查点/保存系统在性能水平。您可以设定要保存,然后使用代理存档读/写各个领域的标志。

SerializeText

原生属性应序列化为文本(文本导入,导出文本)。

SimpleDisplay

属性默认情况下,在详细信息面板出现肉眼可见的。

扩展

原型 & 实例

总的来说,我是这么理解的,也不知是否准确:

  • 一个类对应的蓝图类即为原型。
  • 一个类添加至关卡等的对象即为实例。



作者:peony007
链接:https://www.jianshu.com/p/a86d567be8c3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

这篇关于[UE4]属性声明(Property Declaration)各個宏的定義及作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359734

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用