本篇与笔记五同时使用效果会更好
目录
USpringArmComponent::SocketName
ACharacter::GetCharacterMovement
USceneComponent::SetupAttachment
APawn::AddControllerPitchInput
UEnhancedInputComponent::BindAction
默认头文件

CoreMinimal.h: 包含虚幻特有的类型,例如核心编程环境的普遍存在的类型
GameFramework/Actor.h: 本C++继承自 Actor
FloatingActor.generated.h:
- 存储虚化的反射数据
- 与下方UCLASS(), GENERATED_BODY()搭配使用,可以使变量与函数与编辑器通信
- 该头文件只能放在所有头文件的最下方
PrimaryActorTick.bCanEverTick:控制Tick函数的开与关
GEngine->AddOnScreenDebugMessage():
UCLASS 宏
概述
为 UObject 提供了一个 UCLASS 引用,用于描述它在引擎中的类型。UCLASS 宏的作用是标记 UObject 的子类,以便 UObject 处理系统可以识别它们。(类的反射数据)
- 优先了解 UCLASS宏,再了解 UObject处理系统,先把链接放在这,后面再聊
- 在 UCLASS宏 的链接中提到了UObject可以大概看下,最重要的一点就是
UObjects 永远都不应使用
new运算符。所有的 UObjects 都由虚幻引擎管理内存和垃圾回收。如果通过 new 或者 delete 手动管理内存,可能会导致内存出错。 - UCLASS宏支持大量参数类说明符(Class Specifiers),参数决定类功能的开或关
类说明符(Class Specifiers)
标红的代表可能会常用的类说明符
| 类说明符(Class Specifier) | 效果(Effect) |
| Abstract | 将类声明为"抽象基类",阻止用户向关卡中添加此类的Actor。 |
| AdvancedClassDisplay | 强制类的所有属性仅在显示这些属性的"细节面板(Details Panel)"的"高级(Advanced)"部分中显示。要覆盖单个属性上的此说明符,在该属性上使用`SimpleDisplay`说明符。 |
| Blueprintable | 将此类公开为用于创建蓝图的可接受基类。此说明符由子类继承。 |
| BlueprintType | 将此类公开为可用于蓝图中的变量的类型。 |
| ClassGroup=GroupName | 虚幻编辑器的Actor浏览器中启用 组视图(Group View) 时,Actor浏览器 应在指定的 GroupName 中包含此类及此类的所有子类。 |
| CollapseCategories | 此类的属性不应划分到虚幻编辑器属性窗口的类别中。此说明符会传播到子类,可由`DontCollapseCategories`说明符覆盖。 |
| Config=ConfigName | 可在配置文件(.ini)中存储数据 |
| Const | 此类中的所有属性和函数都是`const`并且导出为`const`。此说明符由子类继承。 |
| ConversionRoot | 根转换,将子类限制为仅可沿层级向上转换为第一个根类的子类。 |
| CustomConstructor | 阻止构造函数声明自动生成。 |
| DefaultToInstanced | 此类的所有实例都被认为是"实例化的"。实例化的类(组件)将在构造时被复制。此说明符由子类继承。 |
| DependsOn=(ClassName1, ClassName2, ...) | 列出的所有类将先于此类被编译。当某个类使用在另一个类中声明的结构体或枚举时,这非常重要,因为编译器仅知道它已编译了类中的哪些部分。 |
| EditInlineNew | 可以从虚幻编辑器"属性(Property)"窗口创建此类的对象,而非从现有资源引用。默认行为是仅可通过"属性(Property)"窗口指定对现有对象的引用。此说明符会传播到所有子类;子类可通过 NotEditInlineNew 说明符覆盖它。 |
| HideDropdown | 阻止此类在属性窗口组合框中显示。 |
| HideFunctions=(Category1, Category2, ...) | 让指定分类中的所有函数都对用户完全隐藏。 |
| HideFunctions=FunctionName | 将提到的函数对用户完全隐藏。 |
| MinimalAPI | 导致仅导出此类的类型信息,以供其他模块使用。 |
| NotBlueprintable | 此类不是可用于创建蓝图的可接受基类。此为默认说明符,将由子类继承。 |
| NotPlaceable | 使继承自基类的`Placeable`说明符无效。指示不可以在编辑器中将此类的对象放置到关卡、UI场景或蓝图中。 |
| PerObjectConfig | 此类的配置信息将按对象存储,在.ini`文件中,每个对象都有一个分段,根据对象命名,格式为[ObjectName ClassName]`。此说明符会传播到子类。 |
| Placeable | 可在编辑器中创建此类,而且可将此类放置到关卡、UI场景或蓝图中。此标志会传播到所有子类;子类可使用`NotPlaceable`说明符覆盖此标志。 |
| ShowFunctions=(Category1, Category2, ...) | 在属性查看器中显示列出的类别中的所有函数。 |
| ShowFunctions=FunctionName | 在属性查看器中显示指定的函数。 |
| Transient | 只是暂时的保留这个变量的值 |
| Within=OuterClassName | 此类的对象无法在`OuterClassName`对象的实例之外存在。这意味着,要创建此类的对象,需要提供`OuterClassName`的一个实例作为其`Outer`对象。 |
元数据说明符(Class Specifiers)
声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式。
Metadata只存在于编辑器中。请不要编写能够访问到Metadata的游戏逻辑。
类可以使用以下元标签说明符:类元数据说明符(Class Metadata Specifiers)
| 类元标签(Class Meta Tag) | 效果(Effect) |
| BlueprintSpawnableComponent | 如其存在,组件类可由蓝图生成。 |
| BlueprintThreadSafe | 只在蓝图函数库上有效。此说明符将把此类中的函数在动画蓝图中的非游戏线程上标记为可调用。 |
| ChildCannotTick | 用于Actor和组件类。如果本地类无法tick,那么基于此Actor或组件的蓝图生成类则无法tick,即使 bCanBlueprintsTickByDefault 为true也同样如此。 |
| ChildCanTick | 用于Actor和组件类。如果本地类无法tick,那么可以覆盖基于此Actor或组件的蓝图生成类的 bCanEverTick 标签,即使 bCanBlueprintsTickByDefault 为false也同样如此。 |
| 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, .." | 列出与类不兼容的接口。 |
| ShortToolTip="Short tooltip" | 完整提示文本过长时使用的简短提示文本,例如父类选取器对话。 |
| ShowWorldContextPin | 说明放置在此类拥有的图表中的蓝图节点必须显式其World情景引脚(即使其通常状态下为隐藏也同样如此),因为此类的对象无法被用作World情景。 |
| UsesHierarchy | 类使用层级数据。用于实例化"细节"面板中的层级编辑功能。 |
| ToolTip="Hand-written tooltip" | 覆盖从代码注释自动生成的提示文本。 |
元数据说明符还包括:列举元数据说明符(Enum Metadata Specifiers)、接口元数据说明符(Interface Metadata Specifiers)、结构体元数据说明符(Struct Metadata Specifiers)、函数元数据说明符(Function Metadata Specifiers)、属性元数据说明符(Property Metadata Specifiers)点击了解详情 这里就不过多介绍了
虚幻Object处理
使用适当的宏标记类、属性和函数可以将它们转变为`UClasses、UProperties`和`UFunctions`。这让虚幻引擎能够访问它们,从而允许实现一些后台处理功能。
自动属性初始化
在调用构造函数之前,UObject 在初始化时自动归零。成员随后可以使用类构造函数中的自定义值进行初始化。
自动更新引用
AActor`或`UActorComponent`被销毁或者从运行中删除时,对反射系统可见的对它的所有引用(UProperty`指针和虚幻引擎容器类中存储的指针,如`TArray`)都将自动清空。- 这种功能仅适用于标记了`UPROPERTY`或存储在虚幻引擎容器类中的`UActorComponent`或`AActor`引用。
序列化
当`UObject`被序列化时,所有`UProperty`值都将被自动写入或读取,除非显式标记为"瞬时"或无法从后构造函数默认值进行更改
如果需要自定义行为,则可以覆盖`UObject::Serialize`函数。
更新属性值
当`UClass`的 类默认对象(CDO)更改,引擎将尝试在加载类的所有实例时对这些实例应用这些更改。
编辑器集成
编辑器理解`UObject`和`UProperties`,编辑器可以自动公开这些值以供编辑,而不必编写特殊代码。这可以选择在蓝图视觉脚本系统中融入集成。有许多选项可以控制变量和函数的可访问性和公开。

本文是Unreal Engine 5 C++开发笔记,介绍了默认头文件,详细讲解UCLASS、UPROPERTY、GENERATED_BODY()等宏的作用、参数及使用场景,还提及虚幻Object处理的多种功能,如自动属性初始化、垃圾回收等,最后列举了使用和未使用的API。
最低0.47元/天 解锁文章
925

被折叠的 条评论
为什么被折叠?



