3. 生成可射击的岩石

在这个步骤中,我们会设置让玩家通过按钮来生成可射击岩石的逻辑(假设其它条件都已满足)。 在关卡中,我们定义了一些生成点,并且为了获得这些位置之一,我们将会使用 Event Dispatcher (事件调度器),它会在我们的 Level Blueprint (关卡蓝图)中触发事件(我们会在下一步创建该事件),从而获得这些位置之一,并将其发送到我们的角色蓝图。

首先,让我们使角色可以通过按键来生成可射击的岩石。

  1. FirstPersonCharacter 蓝图中, 右键点击 图表中的空白空间,然后添加一个 F 关键事件。

    FKeyEvent.png

  2. 按住 B 不放,然后在图表中 左键点击 ,从而创建 Branch (分支)节点。

  3. isActive 变量中按住 Alt 键并拖曳,然后勾选框,并按下方显示内容进行连接。

    BranchAdded.png

  4. 按住 Control 不放,并拖入 isActivePulls 变量。

  5. 连接 isActive!= 节点(已勾选),并连接 Pulls> 节点(设置为0)。

    TwoNodesAdded.png

  6. 将两个输出都连接到 And 节点,并将其连接到 Branch (分支)的 Condition (条件)中。

    AndAdded.png

    在这里,我们设置了通过查看名称为 isActive 的变量是否为真,以及玩家的 Pulls 数量是否大于0来判断玩家是否可以生成岩石的逻辑。如果两者都为真,则我们会减少 Branch (分支)节点运算结果为真的数量并生成岩石(当然,这部分的脚本仍需要进行设置,请阅下文)。

  7. 按住 Alt 并拖入 Pulls 变量,然后在 Set IsActive 节点连接后进行连接。

  8. 在按住 Control 不放的情况下,再次拉入 Pulls 变量,并将其连接到 Int - Int 节点(设置为 1 )并连接到 Set Pulls

    PullsSet.png

  9. 点击 Compile (编译),然后关闭 Set Pulls 节点,添加 ResetShots 自定义事件。

    CallCustomEvent.png

    您的设置应该看起来类似于以下内容。

    ScriptBeforeEventDispatcher.png

    我们这样就设置完成了在玩家生成岩石时的逻辑,现在我们需要与关卡进行通信,从而获得生成位置。 我们会使用 Event Dispatcher (事件调度器)来执行此操作,它会在按下 F 时进行调用。 Level Blueprint (关卡蓝图)会监听事件调度器,而且当它被调用时,会触发其事件,从而获得生成点之一的位置,并将其传回角色蓝图。

  10. 点击 MyBlueprint 窗口中的 Add Event Dispatchers (添加事件调度器)按钮。

    AddEventDispatcher.png

  11. 点击新事件调度器并在选择后按下 F2 ,然后重命名为 GetSpawnLocation

    RenameEventDispatcher.png

  12. Reset Shots (重设射击次数)函数后的图表中,添加 Call GetSpawnLocation (调用GetSpawnLocation)节点。

    CallEventDispatcher.png

    此时将会添加事件调度器,这是由节点右上角处的信封图标来表示的。

    NewNodeAdded.png

  13. GetSpawnLocation 节点下,添加 Spawn Actor from Class (从类中生成Actor)节点。

    SpawnActorNode.png

  14. Spawn Actor (生成Actor)节点上,设置 Class (类)为 BP_Rock

  15. 另外在 Spawn Actor 节点上,拖放 SpawnLocation 变量到 SpawnTransform 引脚。

    SpawnActorComplete.png

    现在我们的角色蓝图已经设置完成,可以生成可射击的岩石并获得生成岩石的 Transform (变换)位置。

在下一步中,我们会使用 Level Blueprint (关卡蓝图)来获得生成点之一的位置,并在调用角色蓝图的事件调度器时传入该信息到角色蓝图(这样我们就可以在角色蓝图和关卡蓝图间传递信息了)。