函数

函数声明

函数 可以两种基本形式存在:普通 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 函数进行声明的函数类型,玩家可在游戏进行时通过游戏内控制台对其进行调用。

函数说明符

在声明函数时,声明上可添加修饰符以控制引擎和编辑器的不同方面的属性表现。

元数据修饰符

对元数据修饰符的使用按常规类、函数和接口修饰符而不同。

函数参数说明符

Out

声明由引用传递的参数,使函数对其进行修改。

Optional

通过任选关键词可使部分函数参数变为任选,便于调用。任选参数的数值(调用方未指定)取决于函数。例如,SpawnActor 函数使用任选位置和旋转,默认为生成的 Actor 根组件的位置和旋转。添加 = [value] 参数可指定任选参数的默认值。例如:function myFunc(optional int x = -1)。在多数情况下,如无数值被传递到任选参数,将使用变量类型的默认值或零(例如 0、false、""、none)。

函数实现

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

委托

代理允许您在C++对象上以通用的但类型安全的方式调用成员函数。通过使用代理,您可以将其动态地绑定到任何对象的成员函数上,然后在该对象上调用函数,即时调用者不知道该对象的类型也没关系。

复制代理对象是非常安全的。代理可以进行值传递,但是一般不推荐这样做,因为这样就必须在堆上为其分配内存。因此 任何时候您都应该通过引用传递代理。

既支持单播代理也支持多播代理,同时还支持可以安全地序列化到磁盘上的“动态”代理。

代理 页面中查看参考和使用信息。

定时器

利用 定时器 可单次或以设定间隔反复执行操作。使用定时器可延迟执行操作或在一段时间内执行操作。例如使玩家在获得特定道具后进入无敌状态,10 秒钟后恢复正常。或者在玩家进入充满毒气的房间后每秒对其造成伤害。这些功能均可通过定时器实现。

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