蓝图宏

蓝图宏

以下宏用于从 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 许可