【Unreal】小游戏Demo(头文件、宏以及API)-笔记六

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

本篇与笔记五同时使用效果会更好

目录

默认头文件

UCLASS 宏 

概述

类说明符(Class Specifiers)

元数据说明符(Class Specifiers)

虚幻Object处理

自动属性初始化

自动更新引用

序列化

更新属性值

编辑器集成

运行时类型信息和类型转换

垃圾回收

网络复制

UPROPERTY 宏

属性声明宏

核心数据类型

整数、浮点类型、布尔类型

作为位掩码

字符串

属性说明符(Property Specifiers)

元数据说明符(Class Specifiers)

GENERATED_BODY() 宏

引用到的类

额外没有引用的类

属性/常量

USpringArmComponent::SocketName

bUsePawnControlRotation 

bOrientRotationToMovement

使用的API

ACharacter::GetCharacterMovement

USceneComponent::SetupAttachment

APawn::AddMovementInput

APawn::AddControllerYawInput

APawn::AddControllerPitchInput 

UEnhancedInputComponent::BindAction

OnComponentBeginOverlap

CreateWidget

UUserWidget::AddToViewport

额外没有使用的API

FTimerManager::SetTimer

UWorld::SpawnActor


默认头文件

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处理

使用适当的宏标记类、属性和函数可以将它们转变为`UClassesUProperties`和`UFunctions`。这让虚幻引擎能够访问它们,从而允许实现一些后台处理功能。

自动属性初始化

在调用构造函数之前,UObject 在初始化时自动归零。成员随后可以使用类构造函数中的自定义值进行初始化。

自动更新引用
  • AActor`或`UActorComponent`被销毁或者从运行中删除时,对反射系统可见的对它的所有引用(UProperty`指针和虚幻引擎容器类中存储的指针,如`TArray`)都将自动清空。
  • 这种功能仅适用于标记了`UPROPERTY`或存储在虚幻引擎容器类中的`UActorComponent`或`AActor`引用。
序列化

当`UObject`被序列化时,所有`UProperty`值都将被自动写入或读取,除非显式标记为"瞬时"或无法从后构造函数默认值进行更改

如果需要自定义行为,则可以覆盖`UObject::Serialize`函数。

更新属性值

当`UClass`的 类默认对象(CDO)更改,引擎将尝试在加载类的所有实例时对这些实例应用这些更改。

编辑器集成

编辑器理解`UObject`和`UProperties`,编辑器可以自动公开这些值以供编辑,而不必编写特殊代码。这可以选择在蓝图视觉脚本系统中融入集成。有许多选项可以控制变量和函数的可访问性和公开。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值