管理蓝图通信

Direct Blueprint Communication is the most common method of Blueprint Communication and is great for when you have two Blueprints that you know you want to have talk to each other at some point. This type of communication is always one-to-one; meaning one Blueprint (the "Working Blueprint") is requesting to access another Blueprint (the "Target Blueprint"). The simplest way to use Direct Blueprint Communication is to get a reference to the Target Blueprint through a publicly exposed object Variable and then specify which instance of that Blueprint you want to access.

概述

当您应用蓝图时,有时您可能会发现需要访问另一个蓝图中包含的函数、事件及变量。最简单的方法是通过一个公开暴露的对象变量来引用“目标”蓝图,然后指出您想使用的蓝图实例。

引用目标蓝图的简单方法

下面给出了一个示例,展示了从您正在处理的蓝图中引用一个目标蓝图的最简单的、最通用的方法。

创建目标蓝图的对象变量

当您正在应用一个蓝图时,创建一个引用目标蓝图的目标变量使您可以访问该蓝图的函数、事件及变量。

要想创建一个引用目标蓝图的变量:

  1. 蓝图编辑器中打开您正在处理的蓝图(正在工作中的蓝图)。

  2. 图表 模式中,通过在 我的蓝图 面板中点击 Variable(变量) 按钮来创建一个新变量。

    Create a Variable

  3. 给这个新变量取一个和目标蓝图相关的名称,比如 "TargetBlueprint" 。

  4. 详细信息 面板中,点击 Variable Type(变量类型) 旁边的下拉框。展开 Object(对象) 部分。

    Variable Type

  5. 滚动列表,并选择您想引用的那个蓝图的名称。蓝图类型的引用在其名称后会附加 "_C" 。

    Blueprint Reference

  6. 作为最佳实践,最好给你的新对象变量添加一个工具提示信息,可以通过在 Tooltip(工具提示信息) 框中输入文本来完成,比如 "到您想通信的蓝图的引用。"

    Tooltip

  7. 我的蓝图 面板中,点击新对象变量旁边的“闭合眼睛”图标,把它变为“睁开的眼睛”。这通过使得该对象变量变为公有状态来暴露该变量,从而可以在关卡编辑器的 详细信息 面板中设置它们的值。

    Closed Eye

    Open Eye

    “睁开的眼睛” 图表周围的绿色表示该暴露的变量有工具提示信息。如果暴露的变量没有工具提示信息,那么眼睛周围的区域将会使黄色。

  8. 编译并保存蓝图

在决定暴露哪个变量、函数及事件时一定要小心处理。除非其他人访问及修改这些变量是安全的,否则不要暴露这些变量。作为最佳实践指南,最好仅暴露其他蓝图需要的变量及您想让关卡设计师修改的变量,而不是暴露所有内容。

指定蓝图实例

蓝图可以作为一种模板或原型,您可以根据它来创建多个实例。由于这个原因,所以当您正在引用一个目标蓝图时,您可以指定您想使用的目标蓝图实例。

要想指定您想使用的目标蓝图实例:

  1. 在关卡编辑器的 详细信息 面板中,在选中正在工作的蓝图的情况下,查找您刚刚创建的公开暴露的变量的部分。如果您没有在创建变量时指定不同的部分,那么您可以在 Default(默认) 部分找到它。(注意,您必须在您的关卡中放置一个目标蓝图的实例,以便可以在 详细信息 面板中选择一个蓝图)。

  2. 在引用目标蓝图的对象变量名称旁边的下拉框中,选择您想使用的蓝图实例。

    Details Panel

如果您正在处理的蓝图是关卡蓝图,那么您应该在蓝图编辑器中指定您要使用的蓝图实例,而不是在关卡编辑器中。默认情况下,蓝图编辑的 详细信息 面板位于左下角。

如果您不确定列表中的哪个实例和您想使用的实例相对应,那么您可以在场景大纲视图或者视口中选择您想使用的实例,然后在下拉菜单中点击 Use Selected(应用选中项)

使用目标蓝图的函数、事件及变量

在您为目标蓝图创建了一个对象变量后,您可以通过按住Ctrl并拖拽那个变量到图表中来获得到这个变量的引用,这会为它创建一个变量"getter"节点。然后,若您从那个节点的输出引脚开始向外拖拽鼠标,将会出现关联菜单,显示了您可以使用的目标蓝图中的事件、函数及变量的列表。现在您可以像使用其他任何脚本元素一样使用这些元素了。

Context Menu

引用目标蓝图的其他方法

从正在工作的蓝图中引用目标蓝图的更复杂的方法包括:

  • 类型转换为目标蓝图类型。

  • 指定目标蓝图类型作为一个函数的参数

类型转换为蓝图类型

您可以类型转换为蓝图类型,就像您类型转换为其他Actor一样。

要想类型转换为一个蓝图类型:

  1. 在事件图表中,从一个节点的输出引脚拖拽鼠标,该节点的关联菜单中要包含Casting(类型转换)节点,比如Actor的对象变量。在出现的关联菜单中,开始输入"cast"。滚动列表到 Casting(类型转换) 下来查找您的目标蓝图类型,并选择它。

    Casting to a Blueprint

    Casting Node

  2. 从列出了目标蓝图类型的输出引脚拖拽鼠标来查看关联菜单,该菜单中包含了目标蓝图的函数、事件及变量。

    Casting Context Menu

    如果类型转换成功,那么您可以使用目标蓝图类型中的任何函数、事件及变量。您从这个关联菜单中添加的任何节点都将会自动地连接到该类型转换节点的 "success"输出执行引脚。

    Casting Nodes

指定一种蓝图类型作为函数参数

当您在蓝图中应用函数时,您可以把目标蓝图类型指定为那个函数的参数。

要想创建一个指定蓝图类型作为函数参数的函数:

  1. 在正在工作的蓝图内,从 我的蓝图 面板中,点击 Function(函数) 按钮来创建一个函数。

    Create Function

  2. 详细信息 面板中,通过点击 Function(新建) 按钮来添加一个 输入

    New Function Input

  3. NewParam(新建变量) 旁边的下拉框中,展开 Object (对象) 部分,找到目标蓝图类型,并选择它。

    Setting a Function Parameter

  4. 在事件图表中,从新变量的输出引脚开始拖拽鼠标。出现的关联菜单包含了目标蓝图的函数、事件及变量,现在您就可以使用它们了。

    Function Parameter Pin

问题解决

一个常见的错误是您的变量中没有指定实例。如果您正在从当前工作的蓝图中调用目标蓝图中的脚本时该脚本不能工作,那么请确保您在当前工作的蓝图的 详细信息 面板中已经指定了您想使用的蓝图实例。但是,如果您通过函数调用的结果设置了该变量,那么您应该会在您的日志中看到一个警告,提示您的变量有一个 "Access None(没有访问项)"异常。如果你调出信息日志窗口,它应该会提供了一个到导致该问题的节点的可点击链接。