Language:
Page Info
Skill Level:
Engine Version:
Share

通过蓝图生成和销毁Actor

无论要制作哪种类型的游戏,通常都会有一些情况,您希望在运行时出现一些最初没有放入关卡的事物。 在场景中“生成”对象的概念可以使用蓝图视觉脚本 实现,游戏期间“销毁”或撤销已经生成的(或者没有生成的)对象也是如此。

在本指南中,我们将使用变量 引用,通过按下按钮来生成Actor ,将它连接到角色,然后再次按下按钮时将它销毁。

HeroImage.png

步骤

在本操作指南使用 蓝图第三人称模板(Blueprint Third Person Template),其中启用了 初学者内容包(Starter Content)

  1. 在项目中,从主工具栏,单击 蓝图(Blueprints) 按钮,然后选择 打开关卡蓝图(Open Level Blueprint)

    SpawnDestroy_01.png

    关卡蓝图 是一种特殊蓝图类型,特定于每个关卡,可以充当关卡范围的全局图表。

  2. 在图表中单击右键,搜索并添加 从类生成Actor(Spawn Actor from Class) 节点。

    SpawnDestroy_02.png

    这样我们就能指定想要生成的类(或对象类型)来定义想要生成的事物。

  3. SpawnActor 节点的 类(Class) 部分中,选择 Blueprint_Effect_Fire 类。

    SpawnDestroy_03.png

    这是作为 初学者内容包 的一部分创建的蓝图类,在创建项目时已经启用。

  4. 在图表中单击右键,搜索并添加 F 键盘事件。

    SpawnDestroy_04.png

    这个键将成为我们用于生成和销毁火焰效果的按键。

  5. 在图表中再次单击右键,搜索并添加 翻转(Flip Flop) 节点。

    SpawnDestroy_05.png

    该节点等同于开关,首次进入时将执行 A 引脚,第二次进入该节点时将执行 B 引脚。 执行B引脚后,下一次进入时将再次执行A引脚,在A和B引脚之间来回“翻转”。

  6. 单击左键并从 F 节点的 按下(Pressed) 引脚拖出一根引线,连接到 翻转(Flip Flop)生成Actor(Spawn Actor) 节点。

    SpawnDestroy_06.png

    这样使我们能够执行(在按下F时)对生成Actor(Spawn Actor)节点的调用,以生成蓝图火焰效果。

  7. 在图表中再次单击右键,搜索并添加 销毁Actor(Destroy Actor) 节点。

    SpawnDestroy_07.png

    通过该节点,我们可以销毁任何指定的Actor。

  8. 翻转(Flip Flop) 节点的 B 引脚连接到 销毁Actor(Destroy Actor) 节点。

    SpawnDestroy_08.png

    第二次按下 F 时,将调用 翻转(Flip Flop)B 引脚,并将执行 销毁Actor(Destroy Actor) 节点。 销毁Actor(Destroy Actor)有一个 目标(Target) 输入引脚,指示要销毁的节点。 默认情况下,它设置为 自己(Self),在本例中是一个空指针,表示不清楚要销毁什么,因为关卡蓝图不能被销毁。 如果该销毁Actor(Destroy Actor)节点位于角色蓝图内部,我们指示它自己为目标,则将销毁我们的角色。

    在本例中,我们需要告诉销毁Actor(Destroy Actor)应当销毁什么(蓝图火焰效果)。 为此,我们需要创建对生成的蓝图火焰效果的引用。

  9. 右键单击 生成Actor(Spawn Actor) 节点的 返回值(Return Value),并选择 提升为变量(Promote to Variable)

    SpawnDestroy_09.png

    在本例中,返回值(Return Value) 是“我们生成的事物”,也是我们将存储对其引用的对象,以便稍后可以将其销毁。

  10. 在变量的 细节(Details) 面板中,为其指定一个名称,如 CurrentFlames

    SpawnDestroy_10.png

  11. 我的蓝图(MyBlueprint) 面板的 变量(Variables) 下面,按住 Ctrl 然后将 CurrentFlames 变量拖放到图表中,将它连接到 销毁Actor(Destroy Actor)目标(Target)

    SpawnDestroy_11.png

    我们现在指示销毁Actor(Destroy Actor)以对我们创建的蓝图火焰效果的变量引用为目标。

  12. 在图表中再次单击右键,搜索并添加 获取玩家角色(Get Player Character) 节点。

    SpawnDestroy_12.png

    这使我们能够找到指定的玩家角色,以便我们能够访问和获取关于该角色的信息。

  13. 获取玩家角色(Get Player Character)返回值(Return Value),搜索并添加 获取Actor变换(Get Actor Transform) 节点。

    SpawnDestroy_13.png

    这样我们就能得知玩家角色的 位置旋转缩放,我们将使用这个信息来定义蓝图火焰效果的生成位置。

  14. 获取Actor变换(Get Actor Transform)返回值(Return Value) 连接到 生成Actor(Spawn Actor) 节点上的 生成变换(Spawn Transform)

    单击查看大图。

    目前,我们的图表几乎完成了,我们指定了按下 F 键时将在玩家位置生成蓝图火焰,并将它存储为变量。 再次按下 F 键时,将销毁所创建的变量(终止火焰效果)。最后一步是将火焰效果与玩家相连。 目前,生成火焰效果时,将在玩家位置处生成,但如果玩家四处移动,火焰将保持在所生成的位置不动。

  15. 单击左键并从 设置(Set) 节点的引用引脚拖出引线,搜索并添加 连接到Actor(AttachToActor) 节点。

    SpawnDestroy_15.png

    通过该节点,我们可以将火焰效果连接到另一个Actor,在本例中,我们想要将它连接到玩家角色。

  16. 使用 获取玩家角色(Get Player Character) 节点并按以下所示进行连接,将 位置规则(Location Rule)旋转规则(Rotation Rule) 设置为 吸附到目标(Snap to Target)

    单击查看大图。

    这里我们所做的是,将火焰效果的引用变量连接到玩家角色,让它的位置和旋转与玩家相匹配。

  17. 单击 编译(Compile) 按钮编译蓝图。

    SpawnDestroy_17.png

  18. 返回到主关卡编辑器窗口,从 主工具栏 单击 运行(Play) 按钮以在编辑器内运行。

    SpawnDestroy_18.png

最终结果

在编辑器中运行时,按下 F 将生成火焰效果,并且效果与玩家角色相连。 火焰与角色相连时按下 F 键,将使效果消失,再次按下 F 键会重新生成效果。

另一种实现方法是 激活停用 蓝图火焰效果中包含的粒子效果。

单击查看大图。

在上述示例中,我们使用 事件开始播放(Event BeginPlay) 节点在游戏开始时生成蓝图火焰,并将它连接到玩家角色。 我们还停用了粒子效果,在游戏开始时让关联声音淡出。 当按下 F 键时,由于蓝图火焰效果已经生成(只是没有激活),我们会激活效果并淡入音频。 再次按下 F 键时,没有销毁效果,而是停用效果并淡出关联声音。