UFunctions

创建和实现游戏性类函数的参考。

Windows
MacOS
Linux

函数声明

函数 可以两种基本形式存在:普通 C++ 函数或 UFunction。C++ 函数和 UFunction 均在 .h 类头文件中进行声明。C++ 函数通过标准 C++ 语法进行声明。UFunctions 使用的是一种专用的语法,声明中将使用 函数说明符 来说明函数的额外信息。

UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)])
ReturnType FunctionName([Parameter, Parameter, ...])

UFunctions 行为与 C++ 函数相同。C++ 函数中拥有一个 C++ 实现,可从 C++ 代码中进行调用,并可包含对其他 C++ 函数的调用或在它们的函数主体中对 UFunctions 的调用。然而 UFunctions 在一些地方存在不同。例如,它们可从 蓝图可视化脚本编辑 系统中被调用或覆写。任何使用 BlueprintCallableBlueprintImplementableEventBlueprintPure 说明符(在下方的 函数说明符 中了解更多细节)进行声明的 UFunction 均会被公开到蓝图。UFunctions 也可在类的默认属性中作为委托进行指定。此技术常用于将输入行为或坐标轴与 Input 类中的函数结合起来。UFunctions 还用作复制回呼。意味着与其相关的变量发生变化并沿网络复制时,UFunction 将被调用。UFunctions 还是唯一一种可作为 exec 函数进行声明的函数类型,玩家可在游戏进行时通过游戏内控制台对其进行调用。

函数说明符

声明函数时,可以为声明添加 函数说明符,以控制函数相对于引擎和编辑器的各个方面的行为方式。

函数说明符

效果

BlueprintAuthorityOnly

如果在具有网络权限的机器上运行(服务器、专用服务器或单人游戏),此函数将仅从蓝图代码执行。

BlueprintCallable

此函数可在 蓝图关卡蓝图 图表中执行。

BlueprintCosmetic

此函数为修饰性的,无法在专用服务器上运行。

BlueprintGetter

此函数将被用作蓝图公开属性的访问器。此说明符隐含BlueprintPureBlueprintCallable

BlueprintImplementableEvent

此函数可在 蓝图关卡蓝图 图表中实现。

BlueprintInternalUseOnly

指示不应向最终用户公开此函数。

BlueprintNativeEvent

此函数旨在被 蓝图 覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了_Implementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用“_Implementation”方法。

BlueprintPure

此函数不对拥有它的对象产生任何影响,可在 蓝图关卡蓝图 图表中执行。

BlueprintSetter

此函数将被用作蓝图公开属性的赋值函数。此说明符暗含 BlueprintCallable

CallInEditor

可通过 “细节(Details)”面板 中的按钮在编辑器中的选定实例上调用此函数。

Category = "TopCategory|SubCategory|Etc"

在蓝图编辑工具中显示时指定函数的类别。使用|运算符定义嵌套类别。

Client

此函数仅在拥有在其上调用此函数的对象的客户端上执行。用于声明名称与主函数相同的附加函数,但是末尾添加了_Implementation。必要时,此自动生成的代码将调用“_Implementation”方法。

CustomThunk

UnrealHeaderTool 代码生成器将不为此函数生成thunk,用户需要提供一个thunk。

Exec

此函数可从游戏内控制台执行。仅在特定类中声明时,Exec命令才有效。

NetMulticast

此函数将在服务器上本地执行,也将复制到所有客户端上,无论该Actor的 NetOwner 为何。

Reliable

此函数将通过网络复制,并且一定会到达,即使出现带宽或网络错误。仅在与ClientServer配合使用时才有效。

SealedEvent

无法在子类中覆盖此函数。SealedEvent关键词只能用于事件。对于非事件函数,请将它们声明为staticfinal,以密封它们。

ServiceRequest

此函数为RPC(远程过程调用)服务请求。

ServiceResponse

此函数为RPC服务响应。

Server

此函数仅在服务器上执行。用于声明名称与主函数相同的附加函数,但是末尾添加了_Implementation,是写入代码的位置。必要时,此自动生成的代码将调用“_Implementation”方法。

Unreliable

此函数将通过网络复制,但是可能会因带宽限制或网络错误而失败。仅在与ClientServer配合使用时才有效。

WithValidation

用于声明名称与主函数相同的附加函数,但是末尾需要添加_Validate。此函数使用相同的参数,但是会返回bool,以指示是否应继续调用主函数。

元数据说明符

元数据说明符的用法在常规类、函数和接口之间有所不同。

函数元标签

效果

AdvancedDisplay="Parameter1, Parameter2, .."

以逗号分隔的参数列表将显示为高级引脚(需要UI扩展)。

AdvancedDisplay=N

用一个数字替代 N ,第N之后的所有参数将显示为高级引脚(需要UI扩展)。举例而言:'AdvancedDisplay=2’ 将把前两个之外的所有参数标记为高级。

ArrayParm="Parameter1, Parameter2, .."

说明 BlueprintCallable 函数应使用一个Call Array Function节点,且列出的参数应被视为通配符数组属性。

ArrayTypeDependentParams="Parameter"

使用 ArrayParm 时,此说明符将指定一个参数,其将确定 ArrayParm 列表中所有参数的类型。

AutoCreateRefTerm="Parameter1, Parameter2, .."

如列出参数(由引用传递)的引脚未连接,其将拥有一个自动创建的默认项。这是蓝图的一个便利功能。

BlueprintAutocast

仅能由来自蓝图函数库的静态 BlueprintPure 函数使用。Cast节点将根据返回类型和函数首个参数的类型来自动添加。

BlueprintInternalUseOnly

此函数是一个内部实现细节,用于实现另一个函数或节点。其从未直接在蓝图图表中公开。

BlueprintProtected

此函数只能在蓝图中的拥有对象上调用。其无法在另一个实例上调用。

CallableWithoutWorldContext

用于拥有一个 WorldContext 引脚的 BlueprintCallable 函数,说明函数可被调用,即使其类不实现 GetWorld 函数也同样如此。

CommutativeAssociativeBinaryOperator

说明 BlueprintCallable 函数应使用Commutative Associative Binary节点。此节点缺少引脚命名,但拥有一个创建额外输入引脚的“添加引脚(Add Pin)”按钮。

CompactNodeTitle="Name"

说明 BlueprintCallable 函数应在压缩显示模式中显示,并提供在该模式中显示的命名。

CustomStructureParam="Parameter1, Parameter2, ..")

列出的参数都会被视为通配符。此说明符需要 UFUNCTION-level specifier、CustomThunk,而它们又需要用户提供自定义的 exec 函数。在此函数中,可对参数类型进行检查,可基于这些参数类型执行合适的函数调用。永不应调用基础 UFUNCTION,出现错误时应进行断言或记录。

要声明自定义 exec 函数,使用语法 DECLARE_FUNCTION(execMyFunctionName)MyFunctionName 为原函数命名。

DefaultToSelf

用于 BlueprintCallable 函数,说明对象属性的命名默认值应为节点的自我情境。

DeprecatedFunction

蓝图对此函数进行引用时将引起编译警告,告知用户函数已废弃。可使用 DeprecationMessage 元数据说明符添加到废弃警告消息(如提供说明如何替代已废弃的函数)。

DeprecationMessage="Message Text"

如果函数已废弃,尝试编译使用此函数的蓝图时,其将被添加到标准废弃警告。

DevelopmentOnly

被标记为 DevelopmentOnly 的函数只会在Development模式中运行。这适用于调试输出之类的功能(但其不应存在于发布产品中)。

DisplayName="Blueprint Node Name"

此节点在蓝图中的命名将被此处提供的值所取代,而非代码生成的命名。

ExpandEnumAsExecs="Parameter"

用于 BlueprintCallable 函数,说明应为参数使用的 列举 中的每个条目创建一个输入执行引脚。命名参数必须是引擎通过 UENUM 标签识别的一个列举类型。

HidePin="Parameter"

用于 BlueprintCallable 函数,说明参数引脚应从用户视图中隐藏。注意:使用此方式每个函数只能隐藏一个参数引脚。

HideSelfPin

隐藏用于指出函数调用所处对象的“self”引脚。“self”引脚在与调用蓝图的类兼容的 BlueprintPure 函数上为自动隐藏状态。这通常与 DefaultToSelf 说明符共用。

InternalUseParam="Parameter"

HidePin 相似,这将在用户视图中隐藏命名参数的引脚,只能用于一个函数的一个参数。

KeyWords="Set Of Keywords"

指定在搜索此函数时可使用的一套关键词,例如合适放置节点在蓝图图表中调用函数。

Latent

说明一个延迟操作。延迟操作拥有类型为 FLatentActionInfo 的一个参数,此参数由 LatentInfo 说明符命名。

LatentInfo="Parameter"

用于延迟 BlueprintCallable 函数,说明哪个参数是LatentInfo参数。

MaterialParameterCollectionFunction

用于 BlueprintCallable 函数,说明应使用材质覆盖节点。

NativeBreakFunc

用于 BlueprintCallable 函数,说明函数应以标准Break Struct节点的方式进行显示。

NotBlueprintThreadSafe

只在蓝图函数库中有效。此函数将被视为拥有类的整体 BlueprintThreadSafe 元数据的一个例外。

ShortToolTip="Short tooltip"

完整提示文本过长时使用的简短提示文本,例如父类选取器对话。

ToolTip="Hand-written tooltip

覆盖从代码注释自动生成的提示文本。

UnsafeDuringActorConstruction

在Actor构造时调用此函数并非安全操作。

WorldContext="Parameter"

BlueprintCallable 函数使用,说明哪个参数决定运算正在发生的World。

函数参数说明符

Out
Optional

函数实现

类头文件中声明的函数在类源文件中获得定义。

委托

利用 委托 可以泛型但类型安全的方式在C++对象上调用成员函数。可使用委托动态绑定到任意对象的成员函数,之后在该对象上调用函数,即使调用程序不知对象类型也可进行操作。

复制委托对象绝对安全。可利用值传递委托,但此流程创建的副本须在堆上分配内存,因此通常并不推荐此操作。应尽量固定利用引用传递委托。引擎共支持三种类型的委托:

委托 页面中查看参考和使用信息。

定时器

定时器 安排在经过一定延迟或一段时间结束后要执行的操作。例如,您可能希望玩家在获取某个能力提升道具后变得无懈可击,然后10秒钟后恢复可受伤害状态。又或者,您可能希望玩家在穿过一间充满毒气的房间时,每秒受到一次伤害。上述每种情况都可以使用定时器来实现。

Gameplay定时器 页面中查看参考和使用信息。

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见