4. 从关卡传递信息到角色

  1. 在主编辑器视图的工具栏中,点击 Blueprints蓝图)按钮并选择 Open Level Blueprint (打开关卡蓝图)。

    OpenLevelBlueprint.png

  2. 在图表中, 右键点击 并添加 Event Begin Play (开始播放事件)节点以及 Get Player Character (获取玩家角色)节点。

    GetPlayerCharacter.png

  3. Get Player Character (获取玩家角色)节点的 Return Value (返回值)引脚进行拖拽,并添加一个 Cast To FirstPersonCharacter (投射到第一人称角色)节点。

    CastToNode.png

    在此我们使用 Cast (投射)节点来首先获取玩家角色,然后获取由该玩家使用的角色蓝图(本例中被称为 FirstPersonCharacter ,并且我们使用它来对可玩角色设置其它脚本)。 通过使用投射节点,我们得以访问玩家角色的蓝图以及变量、事件和其中的函数。

    关于 Casting (投射)的更多信息,请参照蓝图中的转换 文档页面。

  4. 按照下图显示内容来连接节点,然后在 Cast To 节点的 Return Value (返回值)处,选择 Promote to variable (添加到变量中)。

    PromoteToVariable.png

    我们会创建一个变量,从而保存对玩家正在使用的 FirstPersonCharacter 蓝图的引用,这样我们就不必每次使用投射来获取结果。 通过在 Event Begin Play (开始播放事件)执行此操作,它将会在稍后为我们节省时间。

  5. 选择添加的变量,然后在 详细信息 面板中,将其重命名为 MyCharacter

    RenamedMyCharacter.png

  6. MyCharacter 节点的 Return Value (返回值)处,添加 Assign Get Spawn Location (分配获取生成位置)节点。

    AssignSpawnLocation.png

    这就是我们创建的 Event Dispatcher (事件调度器)。 当您选择它时,将会添加两个额外的节点。

    如果您在列表中没有看到这个节点,请确认您点击了 FirstPersonCharacter 蓝图中的 Compile (编译)并再次尝试。

  7. 请确认您连接了 Bind Event (绑定事件)的新增加的节点。

    ConnectAddedNodes.png

    现在,当我们在角色蓝图中调用 GetSpawnLocation 时,也会同时调用这个新的自定义事件。

  8. 按住 Control 键,从 MyBlueprint 窗口中拖入 MyCharacter 变量,然后添加 Set Spawn Location (设置生成位置)节点。

    SetSpawnLocation.png

  9. 返回主编辑器窗口,并在 World Outliner (世界大纲视图)中,搜索并选择每个 Target Points (目标点)。

    SelectAllTargetPoints.png

  10. 返回 Level Blueprint (关卡蓝图)并在图表中 右键点击 并选择 Create References to 3 selected Actors (创建到3个选择的Actor的引用)。

    AddReferences.png

  11. 在图表中 右键点击 并添加 Make Array (生成数组)节点,然后将其与每个 Target Points (目标点)连接。

    MakeArray.png

    您可以通过点击 Add Pin (添加引脚)按钮来添加更多引脚。 这个数组会存储我们可以访问的目标点集合。

  12. Array (数组)引脚,添加 Get (获取)节点。

  13. Get 节点,添加 Random Integer in Range (范围内的随机整数)节点, Min 设置为 0Max 设置为 2

    GetNodeAdded.png

    在这里我们获得了可用作生成点的随机目标点。 如果您有更多的生成位置,您可以将它们添加到数组中,并增大Range(范围)节点中的 Max 值从而包含它们。

  14. Get 节点,添加 Get Actor Transform (获取Actor变换)节点,并将其连接到 Set Spawn Location (设置生成位置)节点。

    您的完整脚本应该和上图类似,请点击以查看完整内容。

在这个页面里我们进行了许多操作! 我们使用 Cast 节点来访问角色蓝图,然后绑定自定义事件到其中的事件调度器。 这样我们可以在事件调度器被调用时,触发关卡蓝图中的自定义事件。 我们随后获取随机生成位置之一,并将其放置在角色蓝图中作为变量生成位置(它用于我们生成岩石的位置)。

在下一步,我们会让岩石变得可射击,并能够使用名称为 OnHit 的绑定事件进行销毁(也就是在岩石被射击时的事件)。