实现蓝图接口

本页面的内容:

在蓝图中使用接口

使用 蓝图接口 ,允许您通过一种通用方法,来和具有某些特定功能的多种不同类型的对象 进行交互。这意味着您可以具有属于完全不同类型但又共有一些特性的对象,比如一辆汽车和一棵树, 它们都可以受到武器的射击,并且都会受到伤害。通过创建一个包含 OnTakeWeaponFire
函数的 蓝图接口 ,并让汽车和树都实现那个 蓝图接口 , 当汽车或树两者中任何一个被射中时,您可以把它们看成相同的类型,仅需简单地调用 OnTakeWeaponFire 函数即可。

添加接口

在原生代码(C++)中定义的 蓝图接口接口 ,都可以添加到除了 关卡蓝图 之外的任何类型的 蓝图 中。

  1. 点击工具条 上的BlueprintProps.png按钮。

  2. 详细信息 选卡中,滚动到 Interfaces(接口) 类目处。点击 button_AddInterface.png 按钮来查看可用的接口列表。点击您想使用的接口来添加它。

    InterfacesCategory.png

    InterfacesListPopulated.png

通过点击 Implemented Interfaces(已实现的接口) 列表中每个接口旁边的 button_X_Remove.png 按钮,可以删除接口。您也可以将蓝图接口迁移为正常的蓝图函数。关于更多信息,请参照 蓝图接口迁移

接口类目中的 Inherited Interfaces(继承的接口) 部分自动地填充了该对象所继承的任何接口(也就是,在当前蓝图继承的蓝图中实现的接口)。

实现接口成员

当把一个 接口 添加到一个 蓝图 中时,那个 蓝图 必须 实现接口 的函数,才能 在调用函数时执行动作。这可以通过在 事件图表 中为 接口 函数放置一个 Event(事件) 节点来完成。 连接到该 Event(事件) 上的节点定义了函数的功能或实现。

  1. 右击该 蓝图事件图表 ,并选择 Add Event >Event Example Function (把你正在实现的 接口 中的函数名称替换为 Example Function
    )。Event(事件) 节点将显示在 图表 选卡中。

    Implement Interface - Add Event Implement Interface - Event Node

  2. 创建连接到该 事件 的执行引脚的节点网络,来为其设置功能。

    Implement Interface - Event Implementation

调用接口函数

接口 的函数通过使用 Interface Message(接口消息) 节点来执行,这些节点除了在目标没有实现该 接口 时会执行失败且没有征兆提示外,
其外观和行为和正常的函数调用 一样。

Implement Interface - Call Function

在其他蓝图上调用接口函数

接口在不同蓝图间进行通信方面是非常有用的。您可以在其他蓝图上调用一个接口中的函数。当满足以下两个条件时就可以这样做:

当在事件图表中创建一个Interface Function(接口函数)节点时,您通常看到关联菜单中列出了该函数的两个版本。

MyFunctionInMenu.png

值得注意的是列在 Call Function(调用函数) 下面的版本是本地版本,旨在仅从这个蓝图中调用该函数。

Interface Messages(接口消息) 下面列出的版本的设计目的是:在其他实现了同样接口的蓝图中上通过该接口调用该函数。

在节点标题的下面有些标签,以帮助您进行区分:

Local_MyFunction.png Interface_MyFunction.png
本地版本 接口消息版本

调用一个 Interface Message Function(接口消息函数),需要您提供您在其上面调用该函数的适当蓝图的实例。

注意,在这个图片中,我们正在发送另一个蓝图作为Target(目标)输入。这将会在提供的蓝图上调用该函数。如果那个蓝图没有实现该接口,那么将不会发生任何事情。

InterfaceMessageFunctionCalled.png

要想指定一个关卡中存在的蓝图,最好创建一个 'Actor' 类型的公有变量,并使用关卡编辑器的详细信息选卡在那个变量的值处赋予适当的蓝图。

重写接口函数

接口函数的其中一个最重要的方面是:因为它们没有自己的实现,所以每个实现该接口的蓝图可以独立地定义功能。

一旦蓝图实现了一个接口后,该接口的函数就会显示在 我的蓝图 面板中。

iFunctionInExplorer.png

如果你双击那个函数,将会在蓝图编辑器中打开它。这显示了该函数的本地实现。这里所定义的任何功能对于这个蓝图都是唯一的。通过这种方式,您可以为实现该接口的每个蓝图定义定制的功能。

比如,在这个图片中,我们看到一个在蓝图中打开的基本接口函数。目前,函数没有任何功能。

DefaultFunction.png

我们可以创建一个简单的节点网络,来进行数值比较、输出值等类似这样的处理。

ComparisonFunction.png

现在,当从本地调用函数时,函数将取入一个浮点值,将其和数值10进行比较,然后向屏幕输出布尔型结果。

FunctionLogging.png