声明:部分内容来自于b站,知乎,慕课,公开课等的课件,仅供学习使用。如有问题,请联系删除。
部分内容来自UE官方文档,博客等
UPROPERTY()
1. 属性声明: 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
其中Type中的核心数据类型有:
整数
整数数据类型转换是"int"或"uint"后跟位大小。
变量类型 | 说明 |
---|---|
uint8 | 8位无符号 |
uint16 | 16位无符号 |
uint32 | 32位无符号 |
uint64 | 64位无符号 |
int8 | 8位有符号 |
int16 | 16位有符号 |
int32 | 32位有符号 |
int64 | 64位有符号 |
作为位掩码
整数属性现在可以位掩码形式公开给编辑器。要将整数属性标记为位掩码,只需在meta分段中添加"bitmask"即可,如下所示:
/*~ BasicBits appears as a list of generic flags in the editor, instead of an integer field. */
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;
浮点类型
虚幻使用标准C++浮点类型、浮点和双精度。
布尔类型
布尔类型可以使用C++ ool关键字表示或表示为位域。
uint32 bIsHungry : 1;
bool bIsThirsty;
字符串
虚幻引擎4支持三种核心类型的字符串。
- FString是典型的"动态字符数组"字符串类型。
- FName是对全局字符串表中不可变且不区分大小写的字符串的引用。相较于FString,它的大小更小,更能高效的传递,但更难以操控。
- FText是指定用于处理本地化的更可靠的字符串表示。
对于大多数情况下,虚幻依靠TCHAR类型来表示字符。TEXT()宏可用于表示TCHAR文字。
MyDogPtr->DogName = FName(TEXT("Samson Aloysius"));
属性说明符
声明属性时,属性说明符 可被添加到声明,以控制属性与引擎和编辑器诸多方面的相处方式。
属性标签 | 效果 |
---|---|
AdvancedDisplay | 属性将被放置在其出现的任意面板的高级(下拉)部分中。 |
AssetRegistrySearchable | AssetRegistrySearchable 说明符说明此属性与其值将被自动添加到将此包含为成员变量的所有资源类实例的资源注册表。不可在结构体属性或参数上使用。 |
BlueprintAssignable | 只能与组播委托共用。公开属性在蓝图中指定。 |
BlueprintAuthorityOnly | 此属性必须为一个组播委托。在蓝图中,其只接受带 BlueprintAuthorityOnly 标签的事件。 |
BlueprintCallable | 仅用于组播委托。应公开属性在蓝图代码中调用。 |
BlueprintGetter=GetterFunctionName | 此属性指定一个自定义存取器函数。如此属性不带 BlueprintSetter 或 BlueprintReadWrite 标签,则其为隐式 BlueprintReadOnly。 |
BlueprintReadOnly | 此属性可由蓝图读取,但不能被修改。此说明符与 BlueprintReadWrite 说明符不兼容。 |
BlueprintReadWrite | 可从蓝图读取或写入此属性。此说明符与 BlueprintReadOnly 说明符不兼容。 |
BlueprintSetter=SetterFunctionName | 此属性拥有一个自定义编译函数,被隐式标记为 BlueprintReadWrite。注意:必须对变异函数进行命名,并为相同类的一部分。 |
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 | 只适用于本地类。此属性不应包含在自动生成的类声明中。 |
NonPIEDuplicateTransient | 属性将在复制中被重设为默认值,除非其被复制用于PIE会话。 |
NonTransactional | 说明对此属性值的修改不会包含在编辑器的撤销/重新执行历史中。 |
NotReplicated | 跳过复制。这只会应用到服务请求函数中的结构体成员和参数。 |
Replicated | 属性应随网络进行复制。 |
ReplicatedUsing=FunctionName | ReplicatedUsing 说明符指定一个回调函数,其在属性通过网络更新时执行。 |
RepRetry | 只适用于结构体属性。如果此属性未能完全发送(举例而言:Object引用尚无法通过网络进行序列化),则重新尝试对其的复制。对简单引用而言,这是默认选择;但对结构体而言,这会产生带宽开销,并非优选项。因此在指定此标签之前其均为禁用状态。 |
SaveGame | 此说明符可简便地将域显式包含,用于属性关卡中的检查点/保存系统。应在作为游戏存档一部分的所有域上设置此标签,并使用代理归档器对其进行读写。 |
SerializeText | 本地属性应被序列化为文本(ImportText、ExportText)。 |
SkipSerialization | 此属性不会被序列化,但仍能导出为一个文本格式(例如用于复制/粘贴操作)。 |
SimpleDisplay | 出现在 细节 面板中的可见或可编辑属性,无需打开"高级"部分即可见。 |
TextExportTransient | 此属性将不会导出为一个文本格式(因此其无法用于复制/粘贴操作)。 |
Transient | 属性为临时,意味着其无法被保存或加载。以此方法标记的属性将在加载时被零填充。 |
VisibleAnywhere | 说明此属性在所有属性窗口中可见,但无法被编辑。此说明符与"Edit"说明符不兼容。 |
VisibleDefaultsOnly | 说明此属性只在原型的属性窗口中可见,无法被编辑。此说明符与所有"Edit"说明符均不兼容。 |
VisibleInstanceOnly | 说明此属性只在实例的属性窗口中可见(在原型属性窗口中不可见),无法被编辑。此说明符与所有"Edit"说明符均不兼容。 |
日志保存在项目 Saved/Logs 目录的 .txt 文件中
2. UE_LOG
UE_LOG 是一个将格式化消息记录到日志文件中的宏。
UE_LOG(LogTemp, Warning, TEXT("Hello World"));
第一个输入参数 LogTemp 是提供给 DEFINE_LOG_CATEGORY 宏的类别名称。你可以在位于 CoreGlobals.h 的引擎中找到这些类别。要自行创建自定义日志记录类别,请参阅自行定义日志类别小节。
第二个输入参数 Warning 是一个日志详细级别,用于将警告打印到控制台和日志文件中。你可以设置不同的日志详细程度,调整日志的换行模式,或者设置日志的文本颜色。有关更多细节,请参阅日志详细级别小节。
第三个输入参数 Text 是C语言库函数printf样式中字符串文字的格式。
3. 日志详细级别
ELogVerbosity 是一个定义日志记录系统日志详细级别的枚举。它定义了额外的非日志详细级别,允许给定日志换行或设置日志文本的颜色。
枚举 | 说明 |
---|---|
致命(Fatal) | 始终将致命错误打印到控制台和日志文件,即使禁用日志记录,也会出现崩溃。 |
错误(Error) | 将错误打印到控制台和日志文件。Commandlet和编辑器会收集并报告错误。错误消息导致commandlet故障。 |
警告(Warning) | 将警告打印到控制台和日志文件。Commandlet和编辑器会收集并报告警告。 |
显示(Display) | 将消息打印到控制台和日志文件。 |
日志(Log) | 将消息打印到日志文件,但不打印到控制台。 |
冗长(Verbose) | 如果为给定类别启用了冗长日志记录,则将冗长消息打印到日志文件。 这通常用于详细日志记录。 |
极其冗长(VeryVerbose) | 将冗长消息打印到日志文件。如果启用了极其冗长日志记录,则这将用于详细日志记录,否则将产生垃圾信息输出。 |
4. 屏幕调试消息
屏幕调试消息 也能起到很好的信息传递作用。你可以使用以下代码添加屏幕调试消息:
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, TEXT("This is an Example on-screen debug message."));
}
第一个输入参数 key 会获取一个唯一的整型值,用于防止同一消息被多次添加。
第二个输入参数 TimeToDisplay 会获取一个浮点值,用于表示消息在显示多少秒后消失。
第三个输入参数 DisplayColor 用于指定文本显示的颜色。
第四个输入参数 DebugMessage 是要显示的消息。你可以像使用日志那样,在屏幕调试消息中使用格式说明符和变量。
参考资料
https://docs.unrealengine.com/latest/INT/
https://www.bilibili.com/video/BV1zZ42177LZ