一.反射原理
二.常见反射
1. Frequently-used
- UCLASS()/USTRUCT()/UENUM()/UPROPERTY()/UPARAM()/UFUNCTION()…
告知 ue4 生成对类型的反射数据。 - GENERATED_BODY()
ue4 使用它代替成类型生成时所有的必需模板代码。 - BlueprintType
将此类公开为可用于蓝图中的变量的类型。
2. Class
1.1 类说明符
- Abstract
将类声明为"抽象基类",阻止用户向关卡中添加此类的Actor。 - AdvancedClassDisplay
强制类的所有属性仅在细节(Details)面板的高级(Advanced)部分中显示。要覆盖单个属性上的此说明符,在该属性上使用SimpleDisplay说明符。 - AutoCollapseCategories=(Category1, Category2, …)
使得父类上的 AutoExpandCategories说明符的列出类别的效果无效。 - AutoExpandCategories=(Category1, Category2, …)
为此类的对象指定应自动在虚幻编辑器属性窗口中展开的一个或多个类别。要自动展开未使用类别声明的变量,请使用声明变量的类的名称。 - Blueprintable
将此类公开为用于创建蓝图的可接受基类。默认为NotBlueprintable,除非继承时就并非如此。此说明符由子类继承。 - BlueprintType
将此类公开为可用于蓝图中的变量的类型。 - ClassGroup=GroupName
指示在虚幻编辑器的Actor浏览器中启用 组视图(Group View) 时,Actor浏览器 应在指定的 GroupName 中包含此类及此类的所有子类。 - CollapseCategories
指示此类的属性不应划分到虚幻编辑器属性窗口的类别中。此说明符会传播到子类,可由DontCollapseCategories说明符覆盖。 - Config=ConfigName
指示此类可在配置文件(.ini)中存储数据。如果存在任何使用config
或globalconfig
说明符声明的类属性,此说明符将使这些属性存储在指定的配置文件中。此说明符会传播到所有子类并且无法使此说明符无效,但是子类可通过重新声明config
说明符并提供不同的ConfigName
来更改配置文件。常见的ConfigName
值是"Engine"、“Editor”、“Input"和"Game”。 - Const
此类中的所有属性和函数都是const
并且导出为const
。此说明符由子类继承。 - ConversionRoot
根转换,将子类限制为仅可沿层级向上转换为第一个根类的子类。 - CustomConstructor
阻止构造函数声明自动生成。 - DefaultToInstanced
此类的所有实例都被认为是"实例化的"。实例化的类(组件)将在构造时被复制。此说明符由子类继承。 - DependsOn=(ClassName1, ClassName2, …)
列出的所有类将先于此类被编译。提供的类名必须指示同一个或前一个包中的类。可以使用单个DependsOn
行(以逗号分隔)来标识多个依赖类,或者可以通过为每个类使用单独的DependsOn
行来指定多个依赖类。当某个类使用在另一个类中声明的结构体或枚举时,这非常重要,因为编译器仅知道它已编译了类中的哪些部分。 - Deprecated
此类已弃用,序列化时将不保存此类的对象。此说明符由子类继承。 - DontAutoCollapseCategories=(Category, Category, …)
使列出的类别的继承自父类的AutoCollapseCategories
说明符无效。 - DontCollapseCategories
使继承自基类的CollapseCatogories
说明符无效。 - EditInlineNew
指示可以从虚幻编辑器"属性(Property)"窗口创建此类的对象,而非从现有资源引用。默认行为是仅可通过"属性(Property)"窗口指定对现有对象的引用。此说明符会传播到所有子类;子类可通过 NotEditInlineNew 说明符覆盖它。 - HideCategories=(Category1, Category2, …)
列出一个或多个应该对用户完全隐藏的分类。要隐藏未使用类别声明的属性,请使用声明变量的类的名称。此说明符会传播到子类。 - HideDropdown
阻止此类在属性窗口组合框中显示。 - HideFunctions=(Category1, Category2, …)
让指定分类中的所有函数都对用户完全隐藏。 - HideFunctions=FunctionName
将提到的函数对用户完全隐藏。 - Intrinsic
指示此类直接在C++中声明,无 Unreal Header Tool 生成的样板。请勿在新类上使用此说明符。 - MinimalAPI
导致仅导出此类的类型信息,以供其他模块使用。可以以此类为目标进行强制转换,但此类的函数无法被调用(除了使用内联方法)。这可以缩短编译时间,因为没有针对无需从其他模块访问其所有函数的类导出一切。 - NoExport
指示此类的声明不应包含在由标头生成器自动生成的C++头文件中。必须在单独的头文件中手动定义该C++类声明。仅对本地类有效。请勿对新类使用此说明符。 - NonTransient
使继承自基类的Transient
说明符无效。 - NotBlueprintable
指定此类不是可用于创建蓝图的可接受基类。此为默认说明符,将由子类继承。 - NotPlaceable
使继承自基类的Placeable
说明符无效。指示不可以在编辑器中将此类的对象放置到关卡、UI场景或蓝图中。 - PerObjectConfig
此类的配置信息将按对象存储,在.ini文件中,每个对象都有一个分段,根据对象命名,格式为[ObjectName ClassName]
。此说明符会传播到子类。 - Placeable
指示可在编辑器中创建此类,而且可将此类放置到关卡、UI场景或蓝图(取决于类类型)中。此标志会传播到所有子类;子类可使用NotPlaceable
说明符覆盖此标志。 - ShowCategories=(Category1, Category2, …)
使列出的类别的继承自基类的HideCategories
说明符无效。 - ShowFunctions=(Category1, Category2, …)
在属性查看器中显示列出的类别中的所有函数。 - ShowFunctions=FunctionName
在属性查看器中显示指定的函数。 - Transient
从不将属于此类的对象保存到磁盘。当与播放器或窗口等本质上不持久的特定种类的原生类配合使用时,它非常有用。此说明符会传播到子类,但是可由NonTransient
说明符覆盖。 - Within=OuterClassName
此类的对象无法在OuterClassName
对象的实例之外存在。这意味着,要创建此类的对象,需要提供OuterClassName
的一个实例作为其Outer
对象。
1.2 元数据说明符
- BlueprintSpawnableComponent
如其存在,组件类可由蓝图生成。 - BlueprintThreadSafe
只在蓝图函数库上有效。此说明符将把此类中的函数在动画蓝图中的非游戏线程上标记为可调用。 - ChildCannotTick
用于Actor和组件类。如果本地类无法tick,那么基于此Actor或组件的蓝图生成类则无法tick,即使 bCanBlueprintsTickByDefault 为true也同样如此。 - ChildCanTick
用于Actor和组件类。如果本地类无法tick,那么可以覆盖基于此Actor或组件的蓝图生成类的 bCanEverTick 标签,即使 bCanBlueprintsTickByDefault 为false也同样如此。 - DeprecatedNode
用于行为树节点,说明类已废弃,编译时将显示一条警告。 - DeprecationMessage=“Message Text”
如果类已废弃,尝试编译使用此类的蓝图时,其将被添加到标准废弃警告。 - DisplayName=“Blueprint Node Name”
此节点在蓝图中的命名将被此处提供的值所取代,而非代码生成的命名。 - DontUseGenericSpawnObject
不使用蓝图中的Generic Create Object节点来生成类的一个对象。此说明符只有在用于既非Actor又非ActorComponent的BluprintType类时才有意义。 - ExposedAsyncProxy
在 Async Task 节点中公开此类的一个代理对象。 - IgnoreCategoryKeywordsInSubclasses
用于让一个类的首个子类忽略所有继承的 ShowCategories 和 HideCategories 说明符。 - IsBlueprintBase=“true/false”
说明此类是否为创建蓝图的一个可接受基类,与 UCLASS 说明符、Blueprintable 或 'NotBlueprintable` 相似。 - KismetHideOverrides=“Event1, Event2, …”
不允许被覆盖的蓝图事件的列表。 - ProhibitedInterfaces=“Interface1, Interface2, …”
列出与类不兼容的接口。 - RestrictedToClasses=“Class1, Class2, …”
由蓝图函数库类使用,用于限制列表中命名类的用法。 - ShortToolTip=“Short tooltip”
完整提示文本过长时使用的简短提示文本,例如父类选取器对话。 - ShowWorldContextPin
说明放置在此类拥有的图表中的蓝图节点必须显式其World情景引脚(即使其通常状态下为隐藏也同样如此),因为此类的对象无法被用作World情景。 - UsesHierarchy
说明类使用层级数据。用于实例化"细节"面板中的层级编辑功能。 - ToolTip=“Hand-written tooltip”
覆盖从代码注释自动生成的提示文本。