Choose your operating system:
Windows
macOS
Linux
通过建立对 Actor 的引用,你可以在玩游戏期间通过蓝图或 C++ 访问其属性、变量、事件或函数(若适用),然后修改它们以满足你的游戏性需要。
例如,你想在玩家进入触发器盒时开灯,则建立对灯的引用,然后触发器盒将允许你通过将灯 Actor 键入到触发器盒的 OnComponentBeginOverlap 事件来实现此目标(这样,你就可以开灯)。
正确引用 Actor 对 Actor 之间的通信也很重要,因为错误指定引用将导致失败的通信和不良结果。
实现指南
在本指南中,你将了解在蓝图中 Reference Actors 的多种方法。如果你想在玩游戏期间通过蓝图更改 Actor 的要素,或将引用从一个蓝图传递到另一个蓝图以便你访问和修改它,正确引用 Actor 则十分重要。
关卡蓝图引用
创建引用的最常见方法是在 Level Blueprint 中引用放置在你的关卡中的 Actor。要执行此操作,只需遵循以下步骤。
-
在你的项目中,将一个 Actor 或蓝图 Actor 放置到你的关卡中。
在这里,我们拖入了一个 Box Trigger Actor。
请参见 常见的Actor类型 文档以了解有关 Actor 类型的更多信息。
-
在关卡中选定 Actor 后,单击主工具栏上的 Blueprints 按钮,然后单击 Open Level Blueprint 。
-
打开 Blueprint Editor 窗口后,在图表窗口中 右键 并选择 Create a Reference to TriggerBox 。
在本例中,我们将添加对 TriggerBox 的引用,但你的 Actor 也将在此出现。
-
新节点将会添加到蓝图中,你可以拖出该节点以访问/设置其属性或从中调用事件或函数。
在这里,我们将在玩家重叠触发器时输出至屏幕。当他们退出触发器时,我们将禁用其碰撞以便其不再被触发(除非我们重新启用其碰撞)。尽管我们使用了 TriggerBox,但你可以在关卡中使用本身具有可通过此引用获取方法访问或调用的变量、事件或函数的蓝图 Actor。
生成 Actor 引用
获取 Actor 引用的另一种方法可在关卡中生成 Actor 时执行。请参阅以下示例。
-
在你的项目中,打开你的玩家人物蓝图(我们使用的是 ThirdPersonCharacter )。
-
在图表中, 右键 并添加 Event Begin Play 节点,然后将其连接到 Spawn Actor from Class 节点。
-
在 Spawn Actor 节点的 Class 下拉菜单中,选择游戏启动时你要生成的 Actor 类。
我们将在玩家变换(由 Get Actor Transform 节点表示)中生成 Blueprint_Effect_Fire Actor。
-
拖出 Spawn Actor 节点的 Return Value 针并选择 Promote to variable 。
此操作将在生成的 Actor(命名为 SpawnedActor )外创建一个变量。你也可以拖出 Return Value 以直接访问你所选且将要生成的 Actor 中的变量、事件或函数,但我们使其成为变量以便以后访问。
-
现在,你可以按住 Control 并将变量拖入图表中,然后将其拖出以访问其属性。
在这里,我们将在生成的 Actor 中访问 Particle Effect 组件(以上黄色方框中指示的 P_Fire ),并在玩家按下 F 键时在 ThirdPersonCharacter 蓝图中 Deactivating 它。
管理蓝图通信引用
有时,你的关卡中具有若干个蓝图 Actor,而你想在另一个蓝图中修改其中一个 Actor。这称为 Direct Blueprint Communication ,用于执行此操作的典型步骤如下所列。
-
将两个蓝图 Actor 放置到你的关卡中。
在这里,我们将使用 Blueprint_Effect_Fire 和入门资源包中包含的 Blueprint_Effect_Sparks Actor。
假设我们想在游戏启动几秒钟后让喷火效果停用火花效果。
-
在 Blueprint_Effect_Fire 蓝图中,创建连接到 Delay 节点(设置为 2 秒)的 Event Begin Play 。
-
此时,我们想要应用火花效果,所以我们使用 Blueprint_Effect_Sparks_C 创建一个新变量。
引用蓝图 Actor 由其名称后面加 _C (如上所示)表示。
-
按住 Control 并将新变量拖入图表中,然后将其拖出以访问该蓝图的属性。
我们将变量命名为 Target Blueprint ,你可以看到当我们试图获得火花效果以停用它时,我们可以访问该蓝图的属性。
-
然后,连接表格以在游戏启动 2 秒后停用火花效果。
-
编译 并在编辑器中 运行 ,然后发现该操作不起作用且屏幕显示错误信息。
已展开...
错误信息表示"访问内容为空",这是一个常见错误,会在尝试在蓝图之间通信且首次获取 Actor 的引用时发生。
在 Blueprint_Effect_Fire 蓝图中,我们确定了目标蓝图并为其创建变量,而且停用了火花效果,但是,我们需要指定要应用更改的蓝图的实际实例。
我们可以通过将变量公开来实现此目标,这将允许我们在主编辑器中访问该变量,而且我们可以在主编辑器中选择应受影响的实例。
-
在 Blueprint_Effect_Fire 蓝图中,单击 TargetBlueprint 变量旁的眼睛图标。
此操作会将变量设置为 Public ,该设置将允许我们在编辑器中设置变量。
-
单击 编译 按钮,然后返回主编辑器窗口并在关卡中选择 Blueprint_Effect_Fire Actor。
-
在 Details 面板中,你将看到 Target Blueprint 选项,我们可以通过此选项选择目标蓝图 Actor。
你可以使用下拉菜单选择目标 Actor,或使用滴管并在场景中选择目标 Actor。
-
设置目标 Actor 后,如果你即刻在编辑器中 运行 ,则火花效果将在两秒种后停用。
你可以参阅 直接蓝图通信 和 蓝图通信用法 以了解有关使用管理蓝图通信的更多信息。
转换引用
尽管直接蓝图通信方法可用于获取存在于关卡中的 Actor 之间的引用,但你有时会想在关卡中获取 Actor 引用并将该引用传递到关卡中尚未包含的蓝图 Actor,例如,直到游戏启动才存在于关卡中的玩家人物(或其他 Actor)。在这种情况下,你可以使用 Cast To 节点向你的目标蓝图发送引用。
-
将你要引用的 Actor 放置在关卡中。
-
在关卡中选定 Actor 后,单击主工具栏上的 Blueprints 按钮,然后单击 Open Level Blueprint 。
-
右键 并选择 Create a Reference to... 选项。
-
右键 并添加 Event Begin Play 和 Get Player Character 节点。
-
在你的人物蓝图中,创建你想引用类型的新变量。
我们在 ThirdPersonCharacter 蓝图中创建了名为 TargetBlueprint 的 Blueprint_Effect_Fire_C 类型的变量(因为我们想引用喷火效果)。游戏启动后,关卡蓝图将在关卡中获取 Actor 的引用,然后将其传递到 ThirdPersonCharacter 蓝图以便我们访问其属性。
-
Control ,将变量拖入图表中,然后拖出变量以访问其属性。
此时,当玩家按下 F 键时我们将停用 P_Fire 效果。
尽管我们创建了保存引用的变量,我们仍需要从 Level Blueprint 传递引用。
-
你的脚本完成后, 编译 人物蓝图,然后再次打开 Level Blueprint 。
-
拖出 Cast To 节点的 As My Character C 针并添加 Set Target Blueprint 节点。
将引用节点插入 Set Target Blueprint (或你变量的任何名称)的内针。
-
编译 ,然后在编辑器中 Play 。
如果你按本示例操作,你应可以通过按下 F 键停用喷火效果。
你可以参阅 转换至蓝图类型 和 蓝图通信用法 以了解有关 Actor 转换的更多信息。