设置和获取 Actor 引用

通过建立对 Actor 的引用,您可以在玩游戏期间通过蓝图或 C++ 访问其属性、变量、事件或函数(若适用), 然后修改它们以满足您的游戏性需要。

例如,您想在玩家进入触发器盒时开灯,则建立对灯的引用, 然后触发器盒将允许您通过将灯 Actor 键入到触发器盒的 OnComponentBeginOverlap 事件来实现此目标(这样,您就可以开灯)。

正确引用 Actor 对 Actor 之间的通信也很重要,因为错误指定引用将导致失败的通信和不良结果。

查看以下步骤,了解 设置获取 Actor 引用的实例。

在此实例中,我们使用的是启用了 新手内容Blueprint Third Person 模板

  1. Modes 菜单中的 Basic 下,将一个 Box Trigger 拖入关卡。

    1AddTriggerBox.png

    我们将利用它触发关卡中另一个 Actor 的移动。

  2. Box TriggerDetails 面板中,选择 Convert to Class Blueprint 选项。

    2ReplaceWithBlueprint.png

    我们将使用这个 Actor 创建一个 蓝图,并在其中指派一个存储引用 Actor 的变量。

  3. 为蓝图命名,然后选择 Create Blueprint蓝图编辑器 将打开)。

  4. 在蓝图编辑器中的 My Blueprint 下,点击 Add Variable 按钮。

    3AddVariable.png

  5. 点击变量,然后在 Details 面板中点击 Variable Type 按钮并在 Object Reference 下选择 Actor

    4VariableType.png

    在此我们制定引用为 Actor 类型,且为关卡中的一个 Object

  6. 将变量命名为 TargetActor 并点击 Editable 复选框。

    5NameVariable.png

    此操作将变量设为 Public,通过主编辑器窗口的 Details 面板可在此蓝图外对其进行访问和设置。该功能十分实用,无需进入蓝图即可对变量进行修改。

  7. 可输入显示文本,作为变量功能和用途的 提示文本

    7ToolTip.png

    在上图中输入的文本是 “The Actor to Target”。

  8. 点击控件蓝图编辑器窗口左上部的 Compile 按钮。

    20Compile.png

    完成编译后它将变为一个绿色勾选标记。

    21Complete.png

  9. 最小化蓝图,返回主编辑器窗口,然后在关卡中选择 Box Trigger 蓝图。

  10. 在窗口的 Details 面板中,可以在 Default 下方看到 Target Actor 变量和提示文本。

    8DetailsPanel.png

  11. 前往 Content BrowserContent/StarterContent/Shapes 路径,添加三个 Shape_Cubes 至关卡中。

    9AddingAnActor.png

    如果使用的是自建项目,则可添加任意 Actor、静止网格物体或蓝图到关卡中。

  12. 向关卡添加资源后,在每个 Actor 的 Details 面板中将其移动性设为 Moveable

    22Moveable.png

    完成此设置后,可通过蓝图脚本移动 Actor。

  13. 点击关卡中的 Box Trigger 蓝图。

  14. Details 面板中,点击 Target Actor 下的 None 框,搜索 Shape(或为 Actor(s) 添加的其他名字)。

    10DropDownSelection.png

    点击 None 将显示当前关卡中的所有 Actors,但是我们只需要将添加的方块之一作为目标。

  15. 点击放大镜图标旁边的滴管图标。

    11PickActor.png

    在视口中点击它,将从关卡中选择一个 Actor 作为目标 Actor。

  16. 将滴管图标移动至一个方块(或添加的其他资源)上,点击将其设为目标 Actor。

    11ActorSelected.png

  17. 选择 Actor 时,Target Actor 变量将更新为 Details 面板中所选的 Actor。

    13ActorSelected.png

    成为目标 Actor 的 Actor 将拥有 Set 引用。

  18. 打开 Box Trigger 蓝图,然后在 MyBlueprint 窗口中点击眼睛图标并启用 Show Inherited Variables

    showVariables.png

    此操作将在组件上添加事件。这些组件在最初将触发框转换为类蓝图时被继承。

  19. Trigger Base**下,在 CollisionComponent单击右键,选择 Add Event,然后再选择 Add OnComponentBeginOverlap**。

    14AddOverlap.png

    此操作将在图表上创建一个新的 Event 节点。

  20. 按住 Ctrl 键将 TargetActor 变量拖入图表。

    15GetActorReference.png

    此操作将创建一个 Get 节点。此节点将获取指派给变量的所有内容,而该变量已被设为关卡中的一个 Actor。

  21. 拖动 TargetActor 节点,搜索并添加一个 Add Actor Local Offset 节点。

    16AddOffSet.png

    此操作将添加当前目标的变化(可将其从当前位置移动)。

  22. 以下图所示方式连接节点,然后将 Add Actor Local Offset 节点上的 Z 轴数值设为 500.0

    17AddZValue.png

    此操作将获取目标的当前位置,并在触发框发生重叠时使目标沿 Z 轴上移 500 个单位。

  23. Components 窗口中,点击选中 TriggerBox_Blueprint

    selectTriggerBox.png

    如果 Components 窗口不存在,可使用 Window 菜单选项将其启用。

    enableComponentWindow.png

  24. 在触发框 Details 面板的 Rendering 下,取消勾选 Actor Hidden In Game 选项。

    19ActorHiddenInGame.png

    此操作将使触发框在游戏中可见,便于判定玩家从何处进入。

  25. 点击 CompileSave,然后关闭蓝图。

  26. 在主编辑器窗口中,点击 Play 图标在编辑器中开始游戏。

当您进入触发框时,选定的 Actor 将上移 500 个单位。您每次进入触发框时,该框均将上移 500 个单位。建立引用后,变量便了解应该在触发框脚本中影响哪个 Actor。尝试利用该脚本影响关卡中另一个 Actor。

  1. 在关卡视口的主编辑器窗口中点击 Box Trigger 蓝图。

  2. Box TriggerDetails 面板中,点击 Target Actor 旁的滴管图标。

    11PickActor.png

  3. 在关卡视口中点击一个从未使用的 Actor。

  4. 再次在编辑器中开始游戏。

在此情况下,每次玩家进入触发框都会使所选的新 Actor 沿 Z 轴上移 500 个单位。通过对触发框脚本中 Target Actor 变量的使用,便不会被锁定在与脚本相关的特定 Actor 中并可对其进行修改;此外无需对蓝图进行修改便可改变其影响的 Actor。

该实例说明如何将不同对象四处移动。除移动对象外,可使用该方法在玩家按键时开门、开关不同光源、生成供玩家拾取或销毁的道具、以及其他各种功能。

这也是为 Actor 获取引用的多种方式之一。如需要为玩家角色获取引用却无法在主编辑器窗口清楚地进行设置,则须使用不同方法(查看下方 相关页面 章节)。