蓝图宏
以下宏用于从 C++ 操作蓝图函数。
注意: 包装函数的参数名称必须与 UE 中该函数使用的名称完全一致。随后应像
AActor.cpp中那样,将参数传给具有PropertyName参数的宏。
这项要求不适用于带 _CUSTOM 后缀的宏。
使用这些宏时,必须同时提供 UE 属性名称和 C++ 参数名称。
当 UE 属性名称包含空格或其他不适用于 C++ 变量名的字符时,带 _CUSTOM 后缀的宏会很有用。
常规宏
面向 Mod 开发者的常规用途。
UE_BEGIN_SCRIPT_FUNCTION_BODY
按不带类型前缀的完整名称查找非原生(即蓝图)UFunction,找不到时抛出异常。
UE_BEGIN_NATIVE_FUNCTION_BODY
与上面相同,但用于原生(即非蓝图)UFunction。
参见:AActor::K2_DestroyActor。
UE_SET_STATIC_SELF
用于静态函数,应设为该 UFunction 所属类的 CDO。
参见:UKismetNodeHelperLibrary::GetEnumeratorUserFriendlyName。
UE_COPY_PROPERTY
将指定名称的属性复制到已分配的参数结构体中。
- 参数 1:该 UFunction 中存在的属性名称,不带引号。
- 参数 2:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。
UE_COPY_PROPERTY_CUSTOM
将指定名称的属性复制到已分配的参数结构体中。
- 参数 1:该 UFunction 中存在的属性名称,不带引号。
- 参数 2:适用于 C++ 的属性变量名。
- 参数 3:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。
UE_COPY_STRUCT_PROPERTY_BEGIN
开始复制整个结构体。
- 参数 1:该 UFunction 中存在的
FStructProperty的名称,不带引号。
UE_COPY_STRUCT_PROPERTY_CUSTOM_BEGIN
开始复制整个结构体。
- 参数 1:该 UFunction 中存在的
FStructProperty的名称,不带引号。 - 参数 2:适用于 C++ 的属性变量名。
UE_COPY_STRUCT_INNER_PROPERTY
将 FStructProperty 内的属性复制到已分配的参数结构体中。
- 参数 1:传给
UE_COPY_STRUCT_PROPERTY_BEGIN的FStructProperty名称,不带引号。 - 参数 2:指定
FStructProperty中存在的属性名称,不带引号。 - 参数 3:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。 - 参数 4:正在复制的 C++ 变量名称。
参见:AActor::K2_SetActorRotation。
UE_COPY_STRUCT_INNER_PROPERTY_CUSTOM
- 参数 1:传给
UE_COPY_STRUCT_PROPERTY_BEGIN的FStructProperty名称,不带引号。 - 参数 2:指定
FStructProperty中存在的属性名称,不带引号。 - 参数 3:适用于 C++ 的属性变量名。
- 参数 4:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。 - 参数 5:正在复制的 C++ 变量名称。
UE_COPY_OUT_PROPERTY
将指定名称的输出属性从参数结构体复制到指定 C++ 变量中。
因此,包装函数参数(其名称与指定属性相同)必须是引用,即带 & 后缀。
- 参数 1:该 UFunction 中存在的属性名称,不带引号。
- 参数 2:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。
参见:UGameplayStatics::FindNearestActor。
UE_COPY_OUT_PROPERTY_CUSTOM
将指定名称的输出属性从参数结构体复制到指定 C++ 变量中。
- 参数 1:该 UFunction 中存在的属性名称,不带引号。
- 参数 2:适用于 C++ 的属性变量名。
- 参数 3:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。
因此,包装函数参数(其名称与指定属性相同)必须是引用,即带 & 后缀。
UE_COPY_VECTOR
用于复制 FVector 的辅助宏。必须先使用 UE_COPY_STRUCT_PROPERTY_BEGIN。
- 参数 1:要从中复制的 FVector 的 C++ 名称,不带引号。
- 参数 2:FVector 的名称,与传给
UE_COPY_STRUCT_PROPERTY_BEGIN的名称相同,不带引号。
UE_COPY_STL_VECTOR_AS_TARRAY
用于复制 TArray 的辅助宏。
- 参数 1:该 UFunction 中存在的
FArrayProperty的名称,不带引号。 - 参数 2:TArray 所含的 C++ 类型,不带引号。例如,对于
FFloatProperty,使用不带引号的float。 - 参数 3:将 TArray 内容复制到的 C++ 目标。
UE_CALL_FUNCTION
执行非静态函数调用。必须先复制所有非输出参数。
UE_CALL_STATIC_FUNCTION
执行静态函数调用,以 UE_SET_STATIC_SELF 提供的 CDO 作为静态实例。必须先复制所有非输出参数。
UE_RETURN_PROPERTY
复制 UFunction 返回的底层值并将其返回。
- 参数 1:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。
UE_RETURN_PROPERTY_CUSTOM
- 参数 1:复制底层值时使用的类型。例如,对于
FFloatProperty,使用不带引号的float。 - 参数 2:此函数中用于复制返回值的属性名称,不带引号。
UE_RETURN_VECTOR
用于返回 FVector 的辅助宏。
UE_RETURN_STRING
用于返回 FStrProperty 的辅助宏。会转换为 StringType。
UE_RETURN_STRING_CUSTOM
用于返回 FStrProperty 的辅助宏。会转换为 StringType。
- 参数 1:此函数中用于复制返回值的
FStrProperty名称,不带引号。
WITH_OUTER
用于传给宏的 C++ 模板类型,例如 TArray 或 TMap。
例如,向所有宏传参时,应使用不带引号的 WITH_OUTER(TMap, FName, int) 代替 TMap<FName, int>。
内部宏
这些宏仅由其他宏使用;只有充分了解宏内部机制的 C++ API 用户才应直接使用。使用它们需要预先了解 UFunction 的工作原理,通常还需要阅读 BPMacros.hpp 才能掌握正确用法。
UE_BEGIN_FUNCTION_BODY_INTERNAL
如果 UFunction 不存在则抛出异常,并为参数和返回值分配足够空间(尽可能在栈上,否则在堆上)。
UE_COPY_PROPERTY_INTERNAL
查找属性,找不到时抛出异常。
UE_COPY_PROPERTY_CUSTOM_INTERNAL
查找指定名称的属性,找不到时抛出异常。
UE_RETURN_PROPERTY_INTERNAL
查找用于返回值的属性,找不到时抛出异常。
原文:docs/cpp-api/bp-macros.md · 固定提交 560411f18512 · 来源与 MIT 许可