Language:
Page Info
Tags:
Engine Version:
Share

实施蓝图接口

在蓝图中使用接口

使用 蓝图接口(Blueprint Interfaces) 提供了一种实现与多个不同类型的对象交互的通用方法, 这些对象都共享某些特定的功能。这意味着您可以拥有完全不同类型的对象,比如一辆车和一棵树,它们有一个共同的特点, 那就是它们都可以被武器射击并受到伤害。通过创建包含“OnTakeWeaponFire”函数的蓝图接口,并让车和树都实施该蓝图接口, 您可以将车和树视为同一类型, 在它们被击中时只需调用“OnTakeWeaponFire”函数。

添加接口

蓝图接口以及在本地代码(C++)中定义的接口都可以添加到任何类型的蓝图

  1. 从主关卡编辑器(Main Level Editor)窗口中,打开您项目中的 关卡蓝图(Level Blueprint)

    OpenLevelBP.png

  2. 单击顶部工具栏 中的 类设置(Class Settings) 按钮。

    ClassSettings.png

  3. 在右侧的 细节(Details) 面板上,找到 接口(Interfaces) 类别。

  4. 单击 添加接口(Add Interface) 按钮以查看可用接口的列表,然后选择要使用的接口。

    InterfacesCategory.png

    InterfacesListPopulated.png

可单击 已实施的接口(Implemented Interfaces) 列表上各个接口旁的button_X_Remove.png按钮以移除该接口。您还可以从蓝图接口(Blueprint Interfaces)迁移到普通的蓝图函数。有关更多信息,请参阅蓝图接口迁移

接口类别中的 已继承的接口(Inherited Interfaces) 部分自动填充此对象继承的任何接口(即在派生当前蓝图的蓝图中实施)。

实施接口成员

当您将一个接口添加到蓝图中后,该蓝图必须实施该接口的各项功能,以便在调用时 使它们执行任何操作。通过在 EventGraph 中为接口函数放置 事件(Event) 节点来可满足此要求。 连接到事件(Event)的节点定义函数的功能或实施。

  1. 在蓝图的 EventGraph右键单击,并选择 添加事件(Add Event)> 事件...(Event...)

    Implement Interface - Add Event Implement Interface - Event Node

    选择要添加的事件类型,该事件随即将添加到图表中。

  2. 创建连接到该事件的可执行引脚的节点网络,以向其提供功能。

    Implement Interface - Event Implementation

调用接口函数

接口的函数通过使用 接口消息(Interface Message) 节点来执行,这些函数的外观和行为都与普通 函数调用 类似,而不同之处仅在于,如果目标没有实施该接口, 它们可能会失败但不发出任何通知。

Implement Interface - Call Function

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

接口可用于允许不同蓝图之间的通信。您可以在其他蓝图上调用来自单个接口的函数。这可以在满足2个条件时完成:

  • 这两个蓝图均实施了具有所需函数的相同接口。

  • 调用方蓝图知道另一个蓝图的游戏内实例的名称。

在事件图表中创建接口函数节点时,您经常会看到上下文菜单中列出的两个版本的函数。

MyFunctionInMenu.png

需要注意的是,调用函数(Call Function) 下列出的版本是一个本地版本,其仅用于在此蓝图中调用。

接口消息(Interface Messages) 下列出的版本旨在通过实施相同接口的其他蓝图上的接口调用函数。

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

Local_MyFunction.png

Interface_MyFunction.png

本地版本。

接口消息(Interface Message)版本。

调用接口消息函数(Interface Message Function)需要您提供调用该函数时所在的相应蓝图的实例。

注意,在此图像中,我们将发送另一个蓝图作为目标输入。这将调用所提供的蓝图上的函数。如果该蓝图未实施接口,则什么都不会发生。

InterfaceMessageFunctionCalled.png

若要指定存在于关卡内的蓝图,最好是创建一个类型为“Actor”的公共变量,并使用关卡编辑器的 细节(Details) 选项卡在该变量的值中指定适当的蓝图。

调用关卡蓝图上的接口函数

接口还可允许子关卡之间使用 获取流送关卡(Get Streaming Level) 节点进行通信。如果关卡已加载且有效,则 接口消息(Interface Message) 将调用以该关卡的蓝图脚本为目标的函数。

InterfaceGetLevelStreaming.png

覆盖接口函数

接口函数最重要的方面之一是,由于它们没有自己的实施,因此可以为实施接口的每个蓝图独立定义它们的功能。

一旦蓝图实施了某个接口,则该接口的函数将出现在 我的蓝图(My Blueprint) 面板中。

iFunctionInExplorer.png

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

例如,在此图像中,我们看到一个在蓝图中打开的基本接口函数。现在,这个函数没有执行任何操作。

DefaultFunction.png

我们可以创建一个简单的网络来进行数字比较,然后输出值,正如下图所示。

ComparisonFunction.png

现在,当您在本地调用该函数时,它将采用一个浮点数,并将其与数字10进行比较,然后将布尔结果输出到屏幕上。

FunctionLogging.png

Tags