直接蓝图通信

如何从一个蓝图中使用另一个蓝图的函数、事件和变量。

Windows
MacOS
Linux

直接蓝图通信(Direct Blueprint Communication) 是最常见的蓝图通信方法,而且当您有两个蓝图并且想要它们在某个时刻彼此交流时,它可以提供良好的效果。这种交流总是一对一的;这意味着一个蓝图("工作蓝图(Working Blueprint)")请求访问另一个蓝图("目标蓝图(Target Blueprint)")。直接蓝图通信(Direct Blueprint Communication)最简单的使用方法是通过公开的对象变量(Variable) 获得对目标蓝图的参考,然后指定要访问该蓝图的哪个实例。

一般工作流程

为了使用直接蓝图通信(Direct Blueprint Communication),您需要做的第一件事是识别将要通信的蓝图。

SelectedBlueprints.png

在上图中,我们有一个角色蓝图和我们希望角色能够关闭的吊灯蓝图。

在这个实例中,工作蓝图是我们的角色蓝图,而我们的目标蓝图则是吊灯蓝图。通过直接蓝图通信,我们可以假定,当玩家角色按下按钮时,锁定吊灯蓝图为目标并关闭吊灯。为此,我们需要在角色蓝图中创建一个公开展示的变量,并以吊灯蓝图为目标。

TargetVariable.png

在上文的角色蓝图中,我们已经创建了蓝图吊灯类型的一个变量,我们还将它设置为 可编辑(Editable),这将允许我们设置希望在关卡中影响的光源实例。

请注意您公开了哪些变量、函数和事件。请勿公开变量,除非其他人可以安全地访问和更改它们。作为最佳实践指南,公开其他蓝图需要的内容以及您希望关卡设计师能够更改的内容即可,而非公开所有内容。

在我们选择了角色蓝图的关卡中,我们可以看到能够从 细节(Details) 面板中设置的新变量。

NewVariableCreated.png

默认情况下,该变量设置为 无(None),并且必须设置为定义您想要影响的吊灯实例,因为您的关卡可能有多个吊灯,并且您需要定义想要与哪个吊灯通信。您可以单击下拉菜单(或滴眼管图标)从关卡中进行选择并指定要与哪个实例通信。

SelectInstance.png

由于我们的关卡中只有一个吊灯,所以仅显示一个,如果我们有更多的吊灯,则它们会在下拉列表中列示。

一旦定义了您要直接与之通信的实例,您就能从您的角色蓝图访问该光源的功能、变量或其他设置。

有关更详细的演练,请参阅直接蓝图通信 的蓝图教程。

函数和直接蓝图通信

当您在蓝图中使用函数(Functions) 时,您仍然可以通过指定目标蓝图类型作为该函数的参数来使用直接蓝图通信(Direct Blueprint Communication)。

FunctionTarget.png

上文中我们已创建了 ToggleLight 函数,并将一个 输入(Input) 引脚设置为我们的蓝图吊灯。

在函数中使用目标蓝图时,仍然需要指出要与目标的哪个实例通信。这可以使用公开的变量(如下所示)来完成,也可以在调用此函数时从外部提供。

ToggleLight.png

在上图中,当您按下 F 时,它将调用 ToggleLight 函数,并将我们的公开变量锁定为目标。

故障排除

当变量中完全没有指定实例时,会出现一个常见错误。当您从工作蓝图中调用脚本时,如果您在从目标蓝图中获取脚本上遇到困难,请确保指定了要使用的蓝图实例。

NoneSettings.png

相反,如果您根据函数调用的结果设置了变量,您应该会在日志中看到一个警告,提醒您的变量发生了"无访问对象(Access None)"异常。如果打开了消息日志(Message Log)窗口,它应该提供一个指向导致问题的节点的可单击链接。

ErrorMessage.png

上文中调用了一个函数,但是没有指定目标蓝图的实例,这导致了 未访问任何对象(Accessed None) 错误。该错误指出了导致问题的脚本以及发生错误的蓝图。单击其中一个将打开导致问题的蓝图。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback