函数

Functions(函数) 是属于特定 蓝图 的节点图表,该节点图表可以执行或者从 蓝图 中的另一个 图表中进行调用。函数具有一个单一的入口点,由和该函数具有相同名称的一个节点指定, 该节点包含了一个单一的执行输出引脚。当从另一个图表调用函数时,会激活该输出执行引脚, 促使执行连接网络。

本页面的内容:

访问修饰符

当创建函数时,您可以指定可以访问及不能访问这些函数的其他对象。这可以通过设置 Access Specifier(访问修饰符) 属性来完成,该属性可以在选中函数的 详细信息 面板中找到。

AccessSpecifier.png

该属性包含以下设置:

设置 描述
Public(公有) 设置函数为 public ,意味着其他任何对象都可以访问该函数。这是默认设置。
Protected(保护) 设置函数为 protected ,意味着仅当前蓝图及任何继承当前蓝图的蓝图可以访问该函数。
Private(私有) 设置函数为 private ,意味着仅能从当前蓝图调用该函数。

纯函数和非纯函数

函数可以是 纯函数 也可以是 非纯函数 。主要的区别是纯函数不会以任何方式修改状态或者类的成员, 而非纯函数可以自由地修改状态。纯函数一般用于 getter 函数 或者仅输出一个数据值的操作符。

非纯函数必须通过在事件图表 中将执行线连接到函数调用节点 来显式地执行。 非纯函数通过使用以下这些方式之一进行指定:

纯函数连接到数据引脚上,当需要依赖于纯函数的数据时,编译器会自动地执行这些函数。这意味着 对于每个连接到纯函数上的节点,都会调用一次纯函数 。纯函数通过使用以下这些方式之一进行指定:

创建函数

在蓝图中创建函数

要想在一个 类蓝图关卡蓝图 中创建函数:

  1. Graph(图表) 模式,从 My Blueprint(我的蓝图) 选卡下,点击New Function (新建函数)按钮。

    new_function_blueprint.png

  2. 输入您的函数的名称。

    name_function_blueprint.png

将会在蓝图编辑器的 Graph Editor(图标编辑器) 选卡的一个新选卡中打开您的函数。

您也可以在 我的蓝图 选卡中右击并选择 Function(函数) 来创建一个函数。

add_function_rtclick.png

在蓝图接口中创建函数

Blueprint Interface(蓝图接口) 中创建函数同在 Class Blueprint(类蓝图)Level Blueprint(关卡蓝图) 中创建函数一样,但是实现是有很大差别的。

要想在 蓝图接口 中创建一个函数:

  1. Graph(图表) 模式,从 My Blueprint(我的蓝图) 选卡下,点击New Function (新建函数)按钮。

    new_function_interface.png

  2. 输入您的函数的名称。

    name_function_interface.png

将会在蓝图编辑器的 Graph Editor(图标编辑器) 选卡的一个新选卡中打开您的函数。

您也可以在 我的蓝图 选卡中右击并选择 Function(函数) 来创建一个函数。

interface_function_rtclick.png

注意: Blueprint Interfaces(蓝图接口) 中的函数没有图表,因为它们没有实现。在 蓝图接口 中创建一个新函数时打开的 图表 将是空的, 只有函数的输入节点,且该节点呈现为灰掉状态。

编辑函数

一旦创建了函数,您就需要定义其功能。这个过程需要两步:

您可以在 详细信息 选卡中设置 Description(描述)Category(类别)Access Specifier(访问修饰符) 及该函数是否为 Pure(纯函数)

打开你的函数的 详细信息 面板,您可以:

输入和输出参数

您也可以在您的函数的 详细信息 面板中设置输入和输出参数。

要想添加输入或输出参数:

  1. 点击 详细信息 面板的 Inputs(输入)Outputs(输出) 部分的 New(新建) 按钮。

  2. 命名该新参数并使用下拉菜单设置其类型。注意,和 蓝图宏 不同,您仅可以向函数添加数据输入和输出。在这个示例中,有两个向量型数据输入 VectorAVectorB ,还有一个浮点型数据输出 Distance

    function_details.png

    函数图表中的入口节点和结果节点将会自动地更新正确的引脚,同时任何函数调用节点也会进行适当地更新。

    function_tunnel_with_pins.png

    function_call_with_pins.png

  3. 您也可以通过展开参数的项来设置默认值,并选择是否应该通过引用传递该值。

    function_details_expanded.png

要想改变节点边上的这个参数的引脚的位置,请使用展开的 详细信息 面板项的向下和向上箭头。

现在,可以定义您的函数的功能了。我们将通过在入口节点和结果节点之间创建节点网络来完成这个处理。

定义功能

您可以通过创建连接输入节点和输出节点的蓝图图表来定义您的函数。在这个示例中,我们将会创建必要的节点网络来应用勾股定理的三维版本,返回三维空间中两个点间的距离。

dx = (x2-x1)^2
dy = (y2-y1)^2
dz = (z2-z1)^2

D = sqrt(dx+dy+dz)

点击查看完整尺寸

PythagoreanNetwork.png

调用函数

一旦您创建并定义了您的函数后,就可以在您的事件图表中调用它。要想创建一个调用您的函数的节点:

这是个简单的网络,取入了两个向量变量,每次更新时,计算这两个变量间的距离,并向屏幕输出该距离值。

点击查看完整尺寸

EventGraph.png

在这个示例中,我们创建了2个公有向量型变量。在每个向量的设置中,我们设置 Show 3D Widget(显示3D控件)True 。现在,在将该 蓝图 添加到关卡中后,3D控件将会出现在由点A和点B定义的位置处。 该3D控件允许我们通过在视口中移动 点A点B ,来轻松地改变它们的值。

点击查看完整尺寸

Points1And2Viewport.png

现在,当我们测试地图时,将会在每次更新时记录两个点之间的值,以证明我们的函数是有效的。

WithBPEditorClosed.png

函数疑难解答

如果在函数调用节点上看到 警告! 条,提示 "不能找到名称为[FunctionName]的函数" 信息,请 编译 您的 蓝图

function_warning.png

如果您改变您的函数上的输入或输出参数的数量,您也需要 编译 您的 蓝图