Unreal Engine蓝图编程学习(四)

我们在这一章需要为玩家增加一些难度。

这一章中需要完成的任务:

  • 玩家冲刺时,体力值下降
  • 玩家子弹打完后无法开枪射击
  • 允许玩家捡取弹夹来补充弹药
  • 定义玩家获胜需要消灭的目标数量
  • 设置一个允许玩家在获胜后重玩或结束游戏的菜单

4.1 限制玩家行为

4.1.1 冲刺时减少体力值 

我们回到FirstPersonCharacter蓝图中。首先,我们需要设计两个变量来追踪玩家是否在冲刺。创建浮点型SprintCost默认值为0.1,创建布尔型IsSprinting?。我们找到冲刺功能的模块,注释为Sprint

我们将设计一个自定义事件来使在玩家冲刺中体力值均匀下降。任何另一个蓝图调用该自定义事件的时候,能够触发此事件附属的蓝图。通过这种方式,同一蓝图中的节点群能够彼此沟通,哪怕它们并非直接相连。

创建一个名称为Sprint Drain的自定义事件节点,后续将被调用和触发。

我们创建一个Set Player Stamina节点,然后从输入引脚创建一个Max(float)节点。我们要确保玩家的体力始终大于0,所以讲其中一个引脚的值保留为0.0,从另一个引脚创建一个Float-Float节点。然后从float节点创建一个Get Player Stamina节点。

接着我们使用一个自定义的公有变量,将它添加到Float-Float节点的一个引脚。这样可以持续的微调减少消耗体力值和检查体力是否正在消耗的变量。在这里将使用sprint cost变量。

《Unreal Engine蓝图编程学习(四)》

 当玩家的体力值为0时,限制冲刺功能并停止减少体力值。这将作为我们分支的判断条件,我们创建一个Float>=Float节点连接两个获取变量值。

《Unreal Engine蓝图编程学习(四)》

 当玩家没有足够体力时,玩家需要回到行走状态、清除计时器并调用自定义事件 Sprint Drain。

接下来我们添加以函数名清除定时器节点,在函数名处输入Sprint Drain。

最后的蓝图如下: 

《Unreal Engine蓝图编程学习(四)》

 下一步需要通过蓝图中新的自定义事件来管理冲刺功能。

4.1.2 使用循环计时器来重复动作

下面我们要自定义sprint蓝图模块来触发自定义事件Sprint Drain。我们找到之前的模块:

《Unreal Engine蓝图编程学习(四)》

 我们从最大速度2200拖出一个Set Is Sprinting?节点(勾选复选框),这样当玩家冲刺时将布尔值设为真。然后我们设置一个计时器,它允许我们,在计时完毕后进行一个动作或者重复性触发事件。

《Unreal Engine蓝图编程学习(四)》

 我们在函数名处输入自定义事件。在Time框中的数字决定了自定义事件调用的频率。我们可以测试一下体力条是否会减少。然而还有个问题,我们需要在玩家松开左Shift键时,需要停止减少体力值,所以我们需要Clear Timer by Function Name节点。

 从Max速度为600的节点,添加上述节点。并输入相应名字。最后连接一个Set Is Sprinting?节点,不要勾选。

《Unreal Engine蓝图编程学习(四)》

 完成这步后,再进行测试。冲刺时减少体力值,不按shift时,体力值停止减少。

 4.1.3 使用分支节点将动作模块化

这一步要保证体力值不够时,不能进行冲刺。我们创建一个分支,比较Player Stamina和Sprint Cost作为条件,当条件为真时,能有冲刺效果。

《Unreal Engine蓝图编程学习(四)》

 4.1.4 重新生成stamina

最后我们要做的,就是重新生成体力值。完成这个效果,我们需要事件Tick触发器来定期逐渐地增加体力值stamina

所以我们首先创建一个事件Tick,然后添加一个分支节点和它相连,获取Is Sprinting?节点作为条件。

由于事件Tick每帧都会触发,我们希望有一段间隔时间。我们使用Delay节点,从分支的假引脚和它相连,设置Delay节点的Duration值是1。这样的话,会在1秒后回复体力值。

《Unreal Engine蓝图编程学习(四)》

我们需要首先定义一个Stamina Recharge Rate变量(浮点型),默认值为0.05。让它和Player Stamina相加,因为我们的体力值变化为0-1,所以我们要保证相加值小于1,在加入一个判断句Min节点

《Unreal Engine蓝图编程学习(四)》

 这样关于体力值的部分,我们升级完成了。

 4.1.5 弹药耗尽时停止开火动作

我们找到对应的子弹模块,在输入动作Fire后添加一个分支节点。获取Player Current Amo,添加一个整数判断条件。如果子弹数大于0,即可完成射击动作。 

《Unreal Engine蓝图编程学习(四)》

 4.2 创建可收集物品

我们还需要一些补充弹药的道具,因为子弹不能像体力值一样,可以自动回复。

为了创建可收集物品,我们需要创建一个新的蓝图,父类为Actor,名字为AmmoPickup。我们进入蓝图后,可以看见是一个小球:

《Unreal Engine蓝图编程学习(四)》

这是默认的外观,我们为了给物品一个可见的形状,我们添加一个静态网格组件,然后给他一个静态网格体和材质,自行调整它的缩放。现阶段不用太纠结美术。

网格添加后,我们再添加一些碰撞,保证网格在碰撞的内部。

《Unreal Engine蓝图编程学习(四)》

 接着我们添加蓝图逻辑,我们希望玩家和对象发生碰撞时,激活效果,并改变玩家的弹药计数器。首先我们将类型转换为FirstPersonCharacter,然后将Other Actor引脚也连接起来。

 我们接着创建一个变量Ammo Pickup Count,Int类型,默认值15。这是为了确定我们需要添加多少弹药。可以得到如下的结构:

《Unreal Engine蓝图编程学习(四)》

 下面我们让物品在拾取时会触发声音,并销毁对象本身。我们添加Play Sound at Location节点,并连接前面的节点,可自行选择声音资产。我们触发声音的位置就是弹药拾取的位置,所以我们还需要GetActorLocation节点,并在最后添加Destroy Actor节点,保证每个物品只能收集一次。

《Unreal Engine蓝图编程学习(四)》

 我们测试下结果如何,我们将AmmoPickup蓝图拖入关卡中,然后测试游戏。每经过一个补给弹药点时,有收集音效,补给点被销毁,弹药数增加,基本效果完成。

 4.3 设置游戏胜利条件

建立完整的游戏循环的最后一步是创建一个条件让玩家赢得游戏的胜利。为此我们需要修改HUD和控制器蓝图。

4.3.1 在HUD中显示目标

为了确定玩家销毁的目标数量是多少,我们创建一个TargetGoal变量,Integer类型,默认值2,可编辑。然后我们进入之前的HUD蓝图中。拖两个文本对象到Goal Tracker对象上。第一个文本对象,字段改为/。第二个文本对象,重命名为Target Goal,文本字段0。调整大小后,创建新的绑定。

《Unreal Engine蓝图编程学习(四)》

 4.3.2 创建胜利菜单

为了实现这个效果,我们需要创建新的蓝图WinMenu(控件蓝图),然后我们拖入两个button和一个Text对象,并将其修改为YOU Win!。我们创建如下的效果(具体效果前面都提到过):

《Unreal Engine蓝图编程学习(四)》

 接着我们要创建相应的事件,点击对应的按钮对象,然后到细节面板中找到如下的位置:

《Unreal Engine蓝图编程学习(四)》

 我们点击时的加号进入事件图表,首先将打开关卡节点附加在这里。在“关卡名称”部分输入关卡名称。然后我们再加入一个Remove From Parent节点。这个节点告诉我们,MinMenu对象停止显示。一旦复位,我们希望菜单消失。

《Unreal Engine蓝图编程学习(四)》

 接着我们对Quit对象也点击事件,我们通过一个新的OnClicked节点,将Quit Game节点附加到此事件:

《Unreal Engine蓝图编程学习(四)》

 4.3.3 显示菜单

我们现在需要做的是,明确何时调出菜单。我们回到FirstPersonCharacter蓝图中。我们创建一个自定义事件End Game。然后添加Set Game Pause节点,并选择暂停的框。然后在结束游戏事件下面,添加一个Get Player Controller节点,并将它附加到设置Show Mouse Cursor节点(这个节点需要取消勾选情景关联),并勾选它旁边的输出执行框。

这个操作会让玩家在游戏暂停后,重新获得对鼠标光标的控制。在完成了游戏的暂停后,我们需要实际显示菜单。我们首先将Create Widget节点附加到最后,然后在下拉列表中找到Win Menu。在最后,我们将其附加到Add to Viewport

《Unreal Engine蓝图编程学习(四)》

 4.3.4 触发胜利

 这里的触发胜利是对圆柱体摧毁到一定数量,所以具体操作需要到圆柱体对应的蓝图中操作。这里我们略过这部分。具体思路是用分支节点设置Target Kill Count,然后设置Destroy Actor附加到分支节点。通过比较摧毁目标数和Target Goal的大小,作为分支的判断条件。

4.4  总结

 这一章,我们主要通过对玩家能力提供有效限制来增加游戏体验,并设置游戏目标。

这一章中我们学习的东西有:

  • 如何使用计时器来重复游戏
  • 如何在游戏世界中创建可收集的对象
  • 如何创建菜单系统

虚幻引擎官方发布了一个学习挑战赛:成为蓝图大师

主要学习内容:

  • AI敌人,粒子特效,保存进度的菜单系统等等,这个和我们这里有相当的重复内容。

学习目标:

  • 三周时间完成从熟练工到大师的必修课程,可以领取虚幻的盲盒。

报名链接:

Blueprint Ninja Challenge – Enterprise Survey Software | QuestionPro SurveyBlueprint Ninja Challenge – Enterprise Survey Software《Unreal Engine蓝图编程学习(四)》https://blueprintninjachallenge.questionpro.com/有简体中文选项,可冲。

    原文作者:packdge_black
    原文地址: https://blog.csdn.net/packdge_black/article/details/120596541
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞