蓝图通信用法
蓝图通信不同用法的总览。
使用蓝图时,如需在蓝图之间传递或共享信息,需要使用一种形式的 蓝图通信。可根据需求使用数种不同类型的通信。此页面讲述最常用的方法并提供帮助链接和使用情况范例。
直接蓝图通信
直接蓝图通信(Direct Blueprint Communication) 是最常见的蓝图通信方法,而且当您有两个蓝图并且想要它们在某个时刻彼此交流时,它可以提供良好的效果。这种交流总是一对一的;这意味着一个蓝图("工作蓝图(Working Blueprint)")请求访问另一个蓝图("目标蓝图(Target Blueprint)")。直接蓝图通信(Direct Blueprint Communication)最简单的使用方法是通过公开的对象变量(Variable)获得对目标蓝图的参考,然后指定要访问该蓝图的哪个实例。
请查看 直接蓝图通信 以了解详情。下篇
何时使用
以下范例讲述何时使用 直接蓝图通信:
关卡中存在两个 Actors,需要进行相互之间的通信。
与关卡中的一个开关进行互动后打开特定的门或开启特定的灯(每个均为单独的蓝图)。
事件分配器
事件分配器 适用于告知其他"正在倾听的"蓝图已发生事件。事件发生时,正在倾听的蓝图便会作出反应,并相互独立地执行预期的操作。
例如,游戏中有一个 Boss,它被消灭时将会调用"OnDied"事件分配器。可将"OnDied"事件 绑定 在任意数量的其他蓝图中,如角色(作出庆祝动作)、关卡中的门(会打开)或 HUD(显示 UI 信息)。所有这些蓝图均在收到 Boss 被消灭的"OnDied"通知后执行。
何时使用
事件分配器 使用时机的例子:
需要从角色蓝图到关卡蓝图进行通信。
玩家角色升级,需要开放之前锁定的区域。 玩家角色按下行动按钮,对关卡执行某种操作。
生成的 Actor 执行某种操作时触发事件。
生成一个 Boss,Boss 被消灭时触发事件,在世界场景中生成一个奖励。 在关卡中生成一个道具(武器、回复剂等)并在道具被拾起时告知道具和角色。
在 设置事件分配器 中可查阅设置流程。
蓝图接口
通过 蓝图接口(简称 接口)可实现与多种类型对象(均共享特定功能)形成互动的一般方法。 例如汽车和树是完全不同的两种对象,但拥有一个共同点 - 它们均可被武器开火击中并遭到破坏。
创建一个包含 OnTakeWeaponFire 函数的蓝图接口,让汽车和树应用此蓝图接口后即可将二者视为相同的对象; 在任意一个对象被击中时调用 OnTakeWeaponFire 函数,并使它们出现不同反应。
理解蓝图接口的最佳方式是将其视为一种合约。合约的内容为:"如应用此接口,则须承诺应用这些特定的函数,并在调用时形成反应。" 多个蓝图可应用一个接口,但并非所有蓝图均会形成反应(部分蓝图将无视调用)。回到之前武器开火的例子中,墙壁不需要对破坏作出反应,因此它们不会应用带 OnTakeWeaponFire 函数的接口,并无视调用。
何时使用
在以下情况实例中,蓝图接口 非常适合于通信:
数个蓝图中存在一些相似功能,但在调用后执行不同的效果。
1. 玩家拥有一个火焰喷射器,使用时将触发一个名为 ElementalDamage 的事件。树木蓝图接受 ElementalDamage 调用并将树木烧毁,而雪人蓝图将把雪人融化。
2. 玩家拥有一个"use"按钮,按下按钮可执行开门、关灯、拾起道具等操作。
3.敌人拥有特殊能力,可基于玩家的体力值完成变化,执行不同操作。
蓝图投射
蓝图通信的另一种常见形式是使用 Cast 节点。使用 Cast 节点时,便是在询问对象"你是否为该对象的特殊版本"。如果是,则进行访问;如否,则忽略请求。
例如,您创建了一个名为"Flying Character 蓝图"的特殊角色蓝图,此蓝图可使玩家角色在游戏中飞行。您可使用 Get Player Character 节点访问玩家角色的移动组件并在通过常规方法对玩家产生影响,如设置其位置、旋转等。您无法获得飞行能力,因为 Character 蓝图并不了解飞行。只有"Flying Character 蓝图"了解飞行。在此例中,您需要获取玩家角色和 Cast To Flying 蓝图,之后才可访问 flying 函数。
如玩家角色未使用 Flying Character 蓝图而完全使用不同类型的 Character 蓝图,则执行 Cast To Flying 蓝图时会失败,因为并未使用 Flying 蓝图,所以无法访问并执行飞行命令。
网友评论