本篇与笔记五同时使用效果会更好
目录
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`,编辑器可以自动公开这些值以供编辑,而不必编写特殊代码。这可以选择在蓝图视觉脚本系统中融入集成。有许多选项可以控制变量和函数的可访问性和公开。
运行时类型信息和类型转换
简单来说就是继承。
可以使用模板化Cast函数或者查询(如果Object是使用`IsA`的特定类)安全地将Object从基类转换为更衍生性类。例如:
class AEnemy : public ACharacter
{
virtual void Speak()
{
Say("Time to fight!");
}
};
class AMegaBoss : public AEnemy
{
virtual void Speak()
{
Say("Powering up!");
Super::Speak();
}
};
class ALegendaryWeapon : public AWeapon
{
void SlayMegaBoss()
{
TArray<AEnemy> EnemyList = GetEnemyListFromSomewhere();
// The legendary weapon is only effective against the MegaBoss
for (AEnemy Enemy :EnemyList)
{
AMegaBoss* MegaBoss = Cast<AMegaBoss>(Enemy);
if (MegaBoss)
{
Incinerate(MegaBoss);
}
}
}
};
使用了`Cast`来尝试将`AEnemy`转换为`AMegaBoss。如果所提及Object实际上不是`AMegaBoss
(或者其子类),则Cast会返回空指针,我们可以适当的做出反应。在以上代码中,`Incinerate`将仅对MegaBoss调用。
垃圾回收
虚幻实现垃圾回收机制,不再被引用或已被显式标记为销毁的`UObject`将定期清除。任何未被引用的`UObject`(意味着未在树搜索中找到这些对象)将被假设为不再需要,因此被删除。
还有一些其他功能以调节,以更精准地控制如何以及何时执行垃圾回收,大部分都可以在 项目设置(Project Settings) 中的 引擎 - 垃圾回收(Engine - Garbage Collection) 下找到。
网络复制
`UObject`系统包含一组可靠的功能,能够促进网络通信和多人游戏。
'UProperties`可以标记为告诉引擎
`UFunctions`也可以标记为在远程机器上执行。
UPROPERTY 宏
属性声明宏
虚幻C++在标准C++基础上实现了一套反射系统,反射系统负责垃圾回收、引用更新,编辑器集成等一系列功能。该 UPROPERTY 的作用就是声明该属性在反射系统的行为。
使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
核心数据类型
整数、浮点类型、布尔类型
布尔类型可以使用C++ bool关键字表示或表示为位域。
uint32 bIsHungry : 1;
bool bIsThirsty;
作为位掩码
整数属性现在可以位掩码形式公开给编辑器。要将整数属性标记为位掩码,只需在meta分段中添加"bitmask"即可,如下所示:(添加一个下拉栏)
/*~ BasicBits appears as a list of generic flags in the editor, instead of an integer field. */
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;
UENUM(Meta = (Bitflags))
enum class EColorBits
{
ECB_Red,
ECB_Green,
ECB_Blue
};
/*~ This property lists flags matching the names of values from EColorBits. */
UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
int32 ColorFlags;
字符串
- FString:典型的"动态字符数组"字符串类型。
- FName:对全局字符串表中不可变且不区分大小写的字符串的引用。相较于FString,它的大小更小,更能高效的传递,但更难以操控。
- FText:指定用于处理本地化的更可靠的字符串表示。
对于大多数情况下,虚幻依靠TCHAR类型来表示字符。TEXT()宏可用于表示TCHAR文字。
MyDogPtr->DogName = FName(TEXT("Samson Aloysius"));
属性说明符(Property Specifiers)
声明属性时,属性说明符 可被添加到声明,以控制属性与引擎和编辑器诸多方面的相处方式。
属性标签(Property Tag) | 效果(Effect) |
AdvancedDisplay | 属性将被放置在其出现的任意面板的高级(下拉)部分中。 |
AssetRegistrySearchable | 说明此属性与其值将被自动添加到将此包含为成员变量的所有资源类实例的资源注册表。不可在结构体属性或参数上使用。 |
BlueprintAssignable | 只能与组播委托共用。公开属性在蓝图中指定。 |
BlueprintAuthorityOnly | 此属性必须为一个组播委托。在蓝图中,其只接受带 BlueprintAuthorityOnly 标签的事件。 |
BlueprintCallable | 仅用于组播委托。应公开属性在蓝图代码中调用。 |
BlueprintGetter=GetterFunctionName | 此属性指定一个自定义存取器函数。如此属性不带 BlueprintSetter 或 BlueprintReadWrite 标签,则其为隐式 BlueprintReadOnly 。 |
BlueprintReadOnly | 此属性可由蓝图读取,但不能被修改。此说明符与 BlueprintReadWrite 说明符不兼容。 |
BlueprintReadWrite | 可从蓝图读取或写入此属性。此说明符与 BlueprintReadOnly 说明符不兼容。 |
Category="TopCategory|SubCategory|..." | 指定在蓝图编辑工具中显示时的属性类别。使用 | 运算符定义嵌套类目。 |
Config | 此属性将被设为可配置。当前值可被存入与类相关的 .ini 文件中,创建后将被加载。无法在默认属性中给定一个值。暗示为 BlueprintReadOnly 。 |
DuplicateTransient | 说明在任意类型的复制中(复制/粘贴、二进制复制等),属性的值应被重设为类默认值。 |
EditAnywhere | 说明此属性可通过属性窗口在原型和实例上进行编辑。此说明符与所有"可见"说明符均不兼容。 |
EditDefaultsOnly | 说明此属性可通过属性窗口进行编辑,但只能在原型上进行。此说明符与所有"可见"说明符均不兼容。 |
EditFixedSize | 只适用于动态数组。这能防止用户通过虚幻编辑器属性窗口修改数组长度。 |
EditInline | 允许用户在虚幻编辑器的属性查看器中编辑此属性所引用的Object的属性(只适用于Object引用,包括Object引用的数组)。 |
EditInstanceOnly | 说明此属性可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行。此说明符与所有"可见"说明符均不兼容。 |
Export | 只适用于Object属性(或Object数组)。说明Object被复制时(例如复制/粘贴操作)指定到此属性的Object应整体导出为一个子Object块,而非只是输出Object引用本身。 |
GlobalConfig | 工作原理与 Config 相似,不同点是无法在子类中进行覆盖。无法在默认属性中对其给定一个值。暗示为 BlueprintReadOnly 。 |
Instanced | 仅限Object(UCLASS )属性。此类的一个实例创建时,其将被给定一个Object的特殊副本,指定到默认项中的此属性。用于实例化类默认属性中定义的子Object。暗示为 EditInline 和 Export 。 |
Interp | 说明值可随时间由Sequencer中的一个轨道驱动。 |
Localized | 此属性的值将拥有一个定义的本地化值。多用于字符串。暗示为 ReadOnly 。 |
Native | 属性为本地:C++代码负责对其进行序列化并公开到垃圾回收。 |
NoClear | 阻止从编辑器将此Object引用设为空。隐藏编辑器中的清除(和浏览)按钮。 |
NoExport | 只适用于本地类。此属性不应包含在自动生成的类声明中。 |
Replicated | 属性应随网络进行复制。 |
ReplicatedUsing=FunctionName | ReplicatedUsing 说明符指定一个回调函数,其在属性通过网络更新时执行。 |
RepRetry | 只适用于结构体属性。如果此属性未能完全发送(举例而言:Object引用尚无法通过网络进行序列化),则重新尝试对其的复制。对简单引用而言,这是默认选择;但对结构体而言,这会产生带宽开销,并非优选项。因此在指定此标签之前其均为禁用状态。 |
SaveGame | 可简便地将域显式包含,用于属性关卡中的检查点/保存系统。应在作为游戏存档一部分的所有域上设置此标签,并使用代理归档器对其进行读写。 |
SerializeText | 本地属性应被序列化为文本(ImportText 、ExportText )。 |
SkipSerialization | 此属性不会被序列化,但仍能导出为一个文本格式(例如用于复制/粘贴操作)。 |
SimpleDisplay | 出现在 细节 面板中的可见或可编辑属性,无需打开"高级"部分即可见。 |
TextExportTransient | 此属性将不会导出为一个文本格式(因此其无法用于复制/粘贴操作)。 |
Transient | 属性为临时,意味着其无法被保存或加载。以此方法标记的属性将在加载时被零填充。 |
VisibleAnywhere | 说明此属性在所有属性窗口中可见,但无法被编辑。此说明符与"Edit"说明符不兼容。 |
VisibleDefaultsOnly | 说明此属性只在原型的属性窗口中可见,无法被编辑。此说明符与所有"Edit"说明符均不兼容。 |
VisibleInstanceOnly | 说明此属性只在实例的属性窗口中可见(在原型属性窗口中不可见),无法被编辑。此说明符与所有"Edit"说明符均不兼容。 |
元数据说明符(Class Specifiers)
声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式。每一种类型的数据结构或成员都有自己的元数据说明符列表。
Metadata只存在于编辑器中。请不要编写能够访问到Metadata的游戏逻辑。
属性可以使用以下元标签说明符:属性元数据说明符(Property Metadata Specifiers)
属性元标签(Property Meta Tag) | 效果(Effect) |
AllowAbstract="true/false" | 用于 Subclass 和 SoftClass 属性。说明抽象类属性是否应显示在类选取器中。 |
AllowedClasses="Class1, Class2, .." | 用于 FSoftObjectPath 属性。逗号分隔的列表,表明要显示在资源选取器中的资源类类型。 |
AllowPreserveRatio | 用于 Fvector 属性。在细节面板中显示此属性时将添加一个比率锁。 |
ArrayClamp="ArrayProperty" | 用于整数属性。将可在UI中输入的有效值锁定在0和命名数组属性的长度之间。 |
AssetBundles | 用于 SoftObjectPtr 或 SoftObjectPath 属性。主数据资源中使用的束列表命名,指定此引用属于哪个束的一部分。 |
BlueprintBaseOnly | 用于 Subclass 和 SoftClass 属性。说明蓝图类是否应显示在类选取器中。 |
BlueprintCompilerGeneratedDefaults | 属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects 在编译后调用时将不会被复制。 |
ClampMin="N" | 用于浮点和整数属性。指定可在属性中输入的最小值 N |
ClampMax="N" | 用于浮点和整数属性。指定可在属性中输入的最大值 N |
ConfigHierarchyEditable | 此属性被序列化为一个配置(.ini )文件,可在配置层级中的任意处进行设置。 |
ContentDir | 由 FDirectoryPath 属性使用。说明将使用 Content 文件夹中的Slate风格目录选取器来选取路径。 |
DisplayAfter="PropertyName" | 在蓝图编辑器中,名为 PropertyName 的属性后即刻显示此属性。前提是两个属性属于同一类别,则忽略其在源代码中的顺序进行显示。如多个属性有相同的 DisplayAfter 值和相同的 DisplayPriority 值,将在指定属性之后,按照自身在标头文件中声明的顺序显示。 |
DisplayName="Property Name" | 此属性显示的命名,不显示代码生成的命名。 |
DisplayPriority="N" | 如两个属性有相同的 DisplayAfter 值,或属于同一类别且无 DisplayAfter 元标签,则此属性将决定其顺序。最高优先级值为1,表示 DisplayPriority 值为1的属性将在 DisplayProirity 值为2的属性之上显示。如多个属性有相同的 DisplayAfter 值,其将按照在标头文件中声明的顺序显示。 |
DisplayThumbnail="true" | 说明属性是一个资源类型,其应显示选中资源的缩略图。 |
EditCondition="BooleanPropertyName" | 对一个布尔属性进行命名,此属性用于说明此属性的编辑是否被禁用。将"!"放置在属性命名前可颠倒测试。 |
EditFixedOrder | 使排列的元素无法通过拖拽来重新排序。 EditCondition元标签不再仅限于单个布尔属性。它现在由完全成熟的算式解析器计算,意味着可以包含一个完整的C++表达式。 |
ExactClass="true" | 结合 AllowedClasses 用于 FSoftObjectPath 属性。说明是否只能使用 AllowedClasses 中指定的准确类,或子类是否同样有效。 |
ExposeFunctionCategories="Category1, Category2, .." | 在蓝图编辑器中编译一个函数列表时,指定其函数应被公开的类目的列表。 |
ExposeOnSpawn="true" | 指定此属性是否应在此类类型的一个Spawn Actor节点上公开。 |
FilePathFilter="FileType" | 由 FFilePath 属性使用。说明在文件选取器中显示的路径过滤器。常规值包括"uasset"和"umap",但这些并非唯一可能的值。 |
GetByRef | 使该属性的"Get"蓝图节点返回对属性的常量引用,而不是其值的副本。只对稀疏类数据生效,只能在不存在 NoGetter 时使用。 |
HideAlphaChannel | 用于 Fcolor 和 FLinearColor 属性。说明详细显示属性控件时 Alpha 属性应为隐藏状态。 |
HideViewOptions | 用于 Subclass 和 SoftClass 属性。隐藏在类选取器中修改显示选项的功能。 |
InlineEditConditionToggle | 表示出布尔属性只内联显示为其他属性中的一个编辑条件切换,不应显示在其自身的行上。 |
LongPackageName | 由 FDirectoryPath 属性使用。将路径转换为一个长的包命名。 |
MakeEditWidget | 用于变换或旋转体属性,或变换/旋转体的排列。说明属性应在视口中公开为一个可移动控件。 |
NoGetter | 防止蓝图为该属性生成一个"get"节点。只对稀疏类数据生效。 |
GENERATED_BODY() 宏
虚幻对构造函数的封装。表示不直接使用父类的构造函数。
与之对应的是 GENERATED_UCLASS_BODY() 表示使用父类的构造函数。
引用到的类
C++ Class | Module | Include | 说明 |
UCameraComponent | Engine | "Camera/CameraComponent.h" | 表示相机设点和设置,例如投影类型、视场和后期处理覆盖 |
Engine | "GameFramework/ SpringArmComponent.h" | 此组件试图将其子组件与父组件保持固定距离,但如果发生碰撞,则将收回子组件,并在没有碰撞时弹回 | |
EnhancedInput | "InputMappingContext.h" | 一个特定输入上下文的键到动作映射的集合,可用于:存储预定义的控制器映射(允许在控制器配置变量之间切换) | |
EnhancedInput | "InputAction.h" | 输入动作是用户可以做的事情的逻辑表示,例如“Jump” or “Crouch” | |
FRotationMatrix | Core | "Math/RotationMatrix.h" | 旋转矩阵不平移(Rotation matrix no translation) |
EnhancedInput | "EnhancedInputSubsystems.h" | Per local player input subsystem | |
EnhancedInput | "EnhancedInputComponent.h" | 为输入绑定实现一个Actor组件 | |
Engine | "Components/ CapsuleComponent.h" | 胶囊体碰撞 | |
Engine | "Components/ PrimitiveComponent.h" | 是包含或生成某种几何形状的场景组件,通常被渲染或用作碰撞数据 | |
CoreUObject | "Templates/SubclassOf.h" | 模版允许[UClass](API\Runtime\CoreUObject\UObject\UClass) )类型在类型安全的情况下传递 | |
UMG | "Blueprint/UserWidget.h" | 通过WidgetBlueprint实现UI可扩展性的小插件 |
额外没有引用的类
C++ Class | Module | Include | 说明 |
Engine | "TimerManager.h" | 计时器管理器 |
属性/常量
USpringArmComponent::SocketName
弹簧臂末端插座的名称(向后看弹簧臂原点)
The name of the socket at the end of the spring arm (looking back towards the spring arm origin)
bUsePawnControlRotation
该属性只在官方的蓝图API中找到
If this component is placed on a pawn, should it use the view/control rotation of the pawn where possible? When disabled, the component will revert to using the stored RelativeRotation of the component.
该组件本身不旋转,而是向往常一样保持其相对于父组件的旋转,并根据继承的旋转设置重新定位和旋转其子组件。
bOrientRotationToMovement
该属性仅在C++API中找到
是属于 UCharacterMovementComponent 中的一个变量
如果为true, 将角色旋转到加速方向,使用RotationRate作为旋转变化的速率。覆盖UseControllerDesiredRotation。
If true, rotate the Character toward the direction of acceleration, using RotationRate as the rate of rotation change. Overrides UseControllerDesiredRotation. Normally you will want to make sure that other settings are cleared, such as bUseControllerRotationYaw on the Character.
使用的API
关于旋转首先要了解
称呼 | 视觉表现 | 旋转轴 |
Pitch | 上下俯视 | 绕Y轴旋转 |
Yaw | 左右转向 | 绕Z轴旋转 |
Roll | 左右滚动 | 绕X轴旋转 |
ACharacter::GetCharacterMovement
Module | Include | 说明 |
Engine | "GameFramework/Character.h" | 获取角色移动组件 |
语法
UCharacterMovementComponent * GetCharacterMovement() const
USceneComponent::SetupAttachment
Module | Include | 说明 |
Engine | "Components/SceneComponent.h" | 初始化组件注册时要附加到的Attach Paren 和SocketName。通常打算从其所属Actor的构造函数调用,当组件未注册时,应该优先使用AttachToComponent |
语法:
void SetupAttachment
(
USceneComponent * InParent,
FName InSocketName
)
参数 | 描述 |
InParent | Parent to attach to. |
InSocketName | Optional socket to attach to on the parent. |
APawn::AddMovementInput
Module | Include | 说明 |
Engine | "GameFramework/Pawn.h" | 沿着给定的世界方向向量添加输入,并按“ScaleValue”进行缩放。如果Scalevalue<0,则运动方向相反。基础Pawn类不会自动应用移动。Character和DefaultPawn这样的子类会自动处理这些输入并移动 |
语法:
virtual void AddMovementInput
(
FVector WorldDirection,
float ScaleValue,
bool bForce
)
参数 | 描述 |
WorldDirection | Direction in world space to apply input |
ScaleValue | Scale to apply to input. This can be used for analog input, ie a value of 0.5 applies half the normal value, while -1.0 would reverse the direction. |
bForce | If true always add the input, ignoring the result of IsMoveInputIgnored(). |
APawn::AddControllerYawInput
这个api在官方的C++API没有找到,只有蓝图API能找到
Module | Include | 说明 |
Engine | "GameFramework/Pawn.h" | 添加输入 (affecting Yaw) 到控制器的ControlRotation,如果它是一个本地的PlayerController。这个值乘以PlayerController的InputYawScale值 |
语法:
virtual void AddControllerYawInput
(
float Val
)
参数 | 描述 |
Val | Amount to add to Yaw. This value is multiplied by the PlayerController's InputYawScale value. |
APawn::AddControllerPitchInput
这个api在官方的C++API没有找到,只有蓝图API能找到
Module | Include | 说明 |
Engine | "GameFramework/Pawn.h" | 添加输入(affecting Pitch)到控制器的ControlRotation,如果它是一个本地的PlayerController。这个值乘以PlayerController的InputPitchScale值 |
语法:
virtual void AddControllerPitchInput
(
float Val
)
参数 | 描述 |
Val | Amount to add to Pitch. This value is multiplied by the PlayerController's InputPitchScale value. |
UEnhancedInputComponent::BindAction
Module | Include | 说明 |
EnhancedInput | "EnhancedInputComponent.h" | 绑定一个对象 UFUNCTION |
语法存在重载,详情参照文档
简易语法:
FEnhancedInputActionEventBinding & BindAction
(
const UInputAction * Action,
ETriggerEvent TriggerEvent,
UObject * Object,
FName FunctionName
)
结构体 | 描述 |
FEnhancedInputActionEventBinding | 绑定到输入动作触发器事件 |
简易参数:
参数 | 描述 |
Action | An Input Action is a logical representation of something the user can do, such as "Jump" or "Crouch". |
TriggerEvent | Trigger events are the Action's interpretation of all Trigger State transitions that occurred for the action in the last tick |
Object | The base class of all UE objects. |
FunctionName | Public name, available to the world. |
OnComponentBeginOverlap
简单来说就是进入触发器的事件
是UPrimitiveComponent 中的一个变量
这里边还有一个 AddDynamic 就是一个委托
FHitResult:带有碰撞信息的结构体,例如撞击点和表面法线
CreateWidget
存在函数重载,全称是 FObjectChooserWidgetFactories::CreateWidget
Module | Include | 说明 |
ChooserEditor | "ObjectChooserWidgetFactories.h" |
UUserWidget::AddToViewport
Module | Include | 说明 |
UMG | "Blueprint/UserWidget.h" | 将其添加到游戏视口并填充整个屏幕,除非调用 SetDesiredSizeInViewport 显示设置大小 |
语法
void AddToViewport
(
int32 ZOrder
)
参数 | 描述 |
ZOrder | 这个数字越高,这个小部件就越靠前 |
额外没有使用的API
FTimerManager::SetTimer
设置一个计时器
UWorld::SpawnActor
生成一个Actor