前言

Hello 大家好,上篇文章中我们完成了 NPC 的 AI 部分,今天我们要完成俩个功能,分别是给 NPC 加上血条以及触动 NPC 攻击,好了废话不多说咱们这就开始吧!

Enemy 血条

在 Enemy 文件夹下创建一个 UI 文件夹,右键选择 User Interface -> Widget Blueprint, 命名为 enemyHP_WB,双击打开。

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键

构建 UI 如图,尺寸选择 Custom, 宽高分别为 150 和 40,然后在画布中拖入 Progress Bar, 命名为 EnemyHPBar,Anchors 居中, 并设置如图所示的参数, 颜色为红色:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_02

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_03

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_04

打开 NPC 的蓝图 Knight_BP, Add Component 选择 Widget,如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_05

调整一下位置,将 Widget 提高到头顶。

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_06

设置 Widget 的 Space 为 Screen, Widget Class 选择我们上面创建的 EnemyHP_WB, Draw Size 设置为 150 和 40:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_07

最后保存一下工程,运行游戏你会发现 NPC 头顶上有了血条:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_08

Enemy 追击

接下来给 NPC 加上一个触发机制,当角色靠近 NPC 时, NPC 会过来追玩家并攻击玩家。

首先,打开 NPC 的蓝图 Knight_BP,在 View Port 视图中添加 PawnSensing 组件然后编译,不编译的话不会出来效果图,并完成如下设置:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏开发_09

随后找到 PawnSensing 的事件 On See Pawn 添加该事件:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏_10

给 Knight_BP 添加一个自定义事件 HunterPlayer:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏_11

定义一个变量 IsActive,用于表示 NPC 是否被激活。

回到我们的 On See Pawn 事件中,构建蓝图逻辑如下:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_12

当触发到该事件的时候,给 IsActive 变量赋值为 true, 并去调用 HunterPlayer 事件。

接下来,构建 HunterPlayer 事件的蓝图逻辑如下:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_13

让其一直移动都在角色所在的位置,效果如下:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏开发_14

Enemy Attack

既然 NPC 已经都追上来了,那不打你一下吗? 接下来,咱们就来实现 NPC 攻击的角色的效果,需要用到动画蒙太奇。

首先,找到动画 Standing_Melee_Attack_Downward 右键 Create AnimMontage, 然后双击打开它。

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏_15

在 Notifies 轨道上右键添加俩个 Notify,分别是 OnAttack 以及 OffAttack, 如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏_16

回到 NPC 的 Knight_BP 蓝图中,为其添加俩个自定义事件,EmenyOnAttack 和 EnemyOffAttack,以及一个 bool 变量 UnderAttack, 如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_17

回到 NPC 的动画蓝图 KnightAnim_BP 中,去响应动画蒙太奇中的 OnAttack 和 OffAttack 俩个事件,如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏开发_18

并在 AnimGraph 中加入 Slot 'DefaultSlot', 如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_19

在 Knight_BP 蓝图中再去自定义一个事件 AttackPlayer,并构建蓝图逻辑如下:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏开发_20

调用 Play Anim Montage 节点去播放攻击动画,等待播放完毕后继续去 Hunter 玩家。

然后在 HunterPlayer 事件中去加入 AttackPlayer,修改如下:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_21

运行游戏,当你靠近敌人时,敌人就会过来追赶你并攻击你。

最后,给我们的 NPC 加上一把武器吧!

打开 NPC 骨骼 Mesh,然后在它的右手节点 RightHand 上 Add Socket 并取名 Weapon,然后右键 Add Preview Asset, 选择一把武器,如图所示:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_22

为了能够更好的将武器位置摆放正确,在右侧的 Preview Controller 中选取 Use Specific Animation, 然后选 好攻击的动画,然后暂停动画播放并调整武器的位置,如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_Unreal Engine_23

回到 Knight_BP 蓝图中,添加一个 Static Mesh Component,并依附于 Mesh, 命名为 Sword,如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_游戏开发_24

然后将它的 Parent Socket 设置为 Weapon,这样它就会随着身体的动画一起动起来,最后将武器的位置调整一下,如图:

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_右键_25

保存运行一下游戏,NPC 就会拿着武器来追你拉!

Unreal Engine 4 RPG 系列教程(十二):Enemy 血条,Enemy Chasing_RPG_26