蓝图通信用法

本页面的内容:

使用蓝图时,如需在蓝图之间传递或共享信息,需要使用一种形式的 蓝图通信。可根据需求使用数种不同类型的通信。此页面讲述最常用的方法并提供帮助链接和使用情况范例。

直接蓝图通信

2_9.png

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.

可在 管理蓝图通信 中查阅详细内容。

何时使用

以下范例讲述何时使用 直接蓝图通信

设置直接蓝图交流 中可查阅设置流程。

事件分配器

OpenDoorEventDispatch.png

事件分配器 适用于告知其他“正在倾听的”蓝图已发生事件。事件发生时,正在倾听的蓝图便会作出反应,并相互独立地执行预期的操作。

例如,游戏中有一个 Boss,它被消灭时将会调用“OnDied”事件分配器。可将“OnDied”事件 绑定 在任意数量的其他蓝图中,如角色(作出庆祝动作)、关卡中的门(会打开)或 HUD(显示 UI 信息)。所有这些蓝图均在收到 Boss 被消灭的“OnDied”通知后执行。

可在 事件调度器 中查阅详细内容。

何时使用

事件分配器 使用时机的例子:

设置事件分配器 中可查阅设置流程。

蓝图接口

InterfaceNodes.png

通过 蓝图接口(简称 接口)可实现与多种类型对象(均共享特定功能)形成互动的一般方法。例如汽车和树是完全不同的两种对象,但拥有一个共同点 - 它们均可被武器开火击中并遭到破坏。

创建一个包含 OnTakeWeaponFire 函数的蓝图接口,让汽车和树应用此蓝图接口后即可将二者视为相同的对象;在任意一个对象被击中时调用 OnTakeWeaponFire 函数,并使它们出现不同反应。

理解蓝图接口的最佳方式是将其视为一种合约。合约的内容为:“如应用此接口,则须承诺应用这些特定的函数,并在调用时形成反应。” 多个蓝图可应用一个接口,但并非所有蓝图均会形成反应(部分蓝图将无视调用)。回到之前武器开火的例子中,墙壁不需要对破坏作出反应,因此它们不会应用带 OnTakeWeaponFire 函数的接口,并无视调用。

可在 实现蓝图接口 中查阅详细内容。

何时使用

在以下情况实例中,蓝图接口 非常适合于通信:

设置蓝图接口 中可查阅设置流程。

蓝图投射

Event6.png

蓝图通信的另一种常见形式是使用 Cast 节点。使用 Cast 节点时,便是在询问对象“你是否为该对象的特殊版本”。如果是,则进行访问;如否,则忽略请求。

例如,您创建了一个名为“Flying Character 蓝图”的特殊角色蓝图,此蓝图可使玩家角色在游戏中飞行。您可使用 Get Player Character 节点访问玩家角色的移动组件并在通过常规方法对玩家产生影响,如设置其位置、旋转等。您无法获得飞行能力,因为 Character 蓝图并不了解飞行。只有“Flying Character 蓝图”了解飞行。在此例中,您需要获取玩家角色和 Cast To Flying 蓝图,之后才可访问 flying 函数。

如玩家角色未使用 Flying Character 蓝图而完全使用不同类型的 Character 蓝图,则执行 Cast To Flying 蓝图时会失败,因为并未使用 Flying 蓝图,所以无法访问并执行飞行命令。

可在 投射 中查阅详细内容。

何时使用

以下是 蓝图投射 使用时机的几个例子:

设置蓝图投射 中可查阅设置流程。