Unreal Engine 4 RPG 系列教程(十三):Enemy 死亡

1,091 阅读4分钟

Hello 大家好,上篇文章中我们完成了给 NPC 的头顶制作血条,触发 NPC 追赶玩家以及攻击玩家的功能,那今天这篇教程就来完成 NPC 受攻击死亡以及玩家受攻击死亡的功能吧!

资源准备

首先,先去 Mixmao 上去下载 NPC 死亡的动画,如图:

image

导入到工程中,选择 NPC 对应的骨骼。

Enemy 死亡

构建动画状态机

打开 NPC 的动画蓝图 KnightAnmi_BP, 添加一个布尔变量 IsDead, 打开 AnimGraph 添加一个状态 Death,构建动画状态机,如图:

image

image

过渡状态用上面新增的 IsDead 变量去控制,打开 Death 状态,将 NPC 死亡的动画拖进去,并取消循环播放的选项,并连接到 Output Animation Pose, 如图:

image

image

更新血条

上一篇文章中,我讲述了如何给 NPC 添加一个血量显示条,今天咱们继续来完成当 NPC 收到伤害时血量减少的功能。

首先,在 EnemyHP_WB 里需要将进度条 ProcessBar 申明为一个变量 EnemyHPBar,如图:

image

打开 NPC 的蓝图 Knight_BP, 新增三个变量, 分别是布尔变量 IsDead, float 变量 CurrHealth, float 变量 MaxHealth, MaxHealth 的默认值赋值为 100,如图:

image

image

在 Knight_BP 蓝图中新增一个函数 UpdateHealth, 并构建其蓝图,如图:

image

在需要更新血条的时候去调用它,逻辑就是用 CurrHealth 和 MaxHealth 去设置血条的 ProcessBar。

回到在 Knight_BP 蓝图中,在 Event BeginPlay 中去给 CurrHealth 赋值,然后调用 UpdateHealth 完成初始化,如图:

image

监听伤害

在 Knight_BP 蓝图中右键找到 Event AnyDamage 节点,来实现监听伤害,并构建如下蓝图逻辑:

image

image

根据传进来的伤害值来更新血量,如果当前血量值低于 0 ,则停止 NPC 的移动,并播放死亡动画。

这里漏讲了一点,那就是需要将变量 IsDead 与死亡动画关联起来,打开 KnightAnmi_BP 的 AnimGraph 添加如下逻辑:

image

制造伤害

伤害监听已经好了,接下来就是去实现如何给 NPC 制造伤害了,我的设想是让角色拿大刀去攻击 NPC,然后当大刀碰到 NPC 的时候,NPC 就掉血,为了完成这一设想,我们还要给角色添加一些逻辑。

首先给动画添加上攻击的消息通知,右键 Add Notify -> New Notify, 并命名为 AttackTrace,由于我这里用到了连招,所以有 2 个动画需要加上 AttackTrace,如图所示:

image

这里大家可能注意到了 AttackTrace 添加的时间节点都是在武器攻击的一个绝佳时机上。

在 Player_BP 蓝图中添加一个函数 AttackTrace。

然后在角色的动画蓝图 PlayerAnmi_BP 中进行关联,如图:

image

回到 Player_BP 蓝图中,在 View Port 中给角色添加一个 Scene Component 命名为 AttackFrom, 来表示攻击的开始地点,如图:

image

然后找到 AttackTrace 函数,构建其蓝图逻辑:

image

解释如下:

  1. 按住鼠标左键攻击时,会触发 AttackTrace 函数
  2. 获取 AttackFrom 的起点坐标,然后再获取其前方距离的坐标(起点坐标乘以 150)
  3. 同过 SphereTraceByChannel 节点来判断是否击中任何 Actor
  4. 过滤击中的 Actor,只需要带有 Tag 为 npc 的 Actor
  5. 调用 Apply Damage 节点来广播伤害,伤害为一个随机范围(80-100)

当运行的时候会出现带有颜色的这种柱状体,它的大小可以根据 SphereTraceByChannel 的 start,end 和 Radius 来控制,当碰到所需的 Actor 的时候颜色会变绿。

image

好了,最后我们来看一下效果吧! NPC 收到玩家攻击后,血量更新了,当血条为 0 时就倒地死亡了。

image

获取工程

关注我的公号 HelloWorld杰少 获取完整的工程。

结尾

好了,今天的教程就到这啦!你学会了吗?创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论。

往期文章:

请你喝杯 ☕️ 点赞 + 关注哦~

  1. 阅读完记得给我点个赞哦,有👍 有动力
  2. 关注公众号--- HelloWorld杰少,第一时间推送新姿势