一、核心概念区分
- Apply Point Damage(施加点伤害,主动调用节点)
主动向目标 Actor 发送单点伤害指令,携带命中坐标、骨骼、攻击方、伤害类型等信息。
- Event Point Damage(事件点状伤害,被动接收事件)
当 Actor 被
Apply Point Damage命中时,自动触发的内置事件,用于目标处理受伤逻辑(扣血、播放受击动画、部位伤害判定、流血特效)。 - 完整流程:武器 / 子弹 →
Apply Point Damage→ 目标 Actor 触发Event Point Damage→ 执行受伤逻辑。
二、前置准备(全部操作步骤)
步骤 1:新建第一人称空白项目
- 启动 Epic Launcher → 虚幻引擎 5 → 新建项目
- 分类:游戏 → 第一人称 → 蓝图
- 设置项目名称、存储路径,点击创建。
步骤 2:创建伤害类型资产(Damage Type)
用于区分子弹、爆炸、近战等不同伤害,在 Event Point Damage 中读取。
- 内容浏览器右键 → 基础资源 → 伤害类型(Damage Type)
- 命名
DT_Bullet(子弹伤害),双击打开可自定义伤害标签、物理冲击参数。
步骤 3:改造子弹蓝图(发送 Apply Point Damage)
默认项目自带
BP_Projectile子弹蓝图,修改命中逻辑发送点伤害:-
内容浏览器打开
FirstPerson/Blueprints/BP_Projectile - 找到默认
On Component Hit事件 - 蓝图连线逻辑(子弹命中发送伤害):
On Component Hit→ 执行线 →Break Hit Result(拆解命中信息)Break Hit Result.Hit Actor→ 接入Apply Point Damage.Damaged Actor(受伤目标)Break Hit Result.Impact Point→Hit from Direction(命中坐标)On Component Hit.Hit引脚 →Hit Info(完整命中数据)Apply Point Damage.Event Instigator= 玩家 Pawn(Get Player Pawn)Apply Point Damage.Damage Causer= self(自身子弹)Base Damage设为35(单发子弹伤害)Damage Type Class选择刚才创建的DT_Bullet
- 追加逻辑:命中后 Destroy Actor(销毁子弹),编译保存。
步骤 4:创建可受伤敌人蓝图(接收 Event Point Damage)
新建敌人 BP,用于接收
Event Point Damage事件处理受伤:-
内容浏览器右键 → 蓝图类 → Character,命名
BP_Enemy -
Health:默认值100,可编辑、显示眼睛打开MaxHealth:默认值100打开蓝图 → 我的蓝图 → 变量,新建 2 个浮点变量:
-
切换到事件图表,空白处右键搜索添加:
Event Point Damage(核心接收事件)
Event Point Damage 全部引脚说明
表格
| 输出引脚 | 作用 |
|---|---|
| Damage | 本次收到的伤害数值(Float) |
| Damage Type | 伤害类型资产引用 |
| Hit Location | 命中世界坐标(生成流血特效) |
| Hit Normal | 命中法线(控制特效朝向) |
| Hit Component | 被击中的模型组件 |
| Bone Name | 命中骨骼名(区分头 / 身体 / 四肢部位伤害) |
| Shot From Direction | 攻击者方向(击退敌人) |
| Instigated By | 伤害发起者(玩家) |
| Damage Causer | 伤害载体(子弹 / 武器) |
| Hit Info | 完整命中结果结构体 |
三、Event Point Damage 完整蓝图逻辑(敌人受伤处理)
完整分步连线操作
- 扣血逻辑
拖拽
Health变量 →Set Health,值为Health - Damage - 部位倍率伤害(头部暴击)
- 从
Bone Name拖出 →Contains String,输入字符串head(头部骨骼名称) - 分支 Branch:True = 头部,False = 身体
- True 分支:额外扣血,执行
Set Health = Health - Damage * 1.5(1.5 倍爆头伤害)
- True 分支:额外扣血,执行
- 命中特效(Hit Location 生成粒子)
- 节点:
Spawn Emitter at Location - Location =
Hit Location - Rotation =
Make Rot from X Vector,向量填Hit Normal - Emitter 模板填入血液粒子 P_Blood(可使用引擎自带 Niagara 粒子)
- 敌人死亡判定
- 分支 Branch:
Health <= 0- True:执行死亡逻辑
Set Actor Hidden In Game隐藏模型Destroy Actor延时 2 秒销毁
- False:播放受击动画
Play Anim Montage
- True:执行死亡逻辑
- 击退效果
Launch Character节点,推力方向取反向Shot From Direction,力度 500
完整蓝图流程图文字版
plaintext
Event Point Damage
├─分支:Bone Name是否包含head(头部判定)
│ ├─True:Health = Health - Damage * 1.5
│ └─False:Health = Health - Damage
├─Spawn Emitter at Location(Hit Location+Hit Normal)//流血特效
├─Launch Character(击退敌人)
└─分支 Health <= 0
├─True:播放死亡动画 → 延时2s销毁Actor
└─False:播放受击硬直动画
四、关键碰撞设置(必做,否则伤害无法触发)
1. 子弹碰撞设置(BP_Projectile)
- 选中
Projectile Movement组件- 碰撞预设:Projectile
- 碰撞响应:对 Pawn 设为Block(阻挡,触发 On Hit)
- 静态网格体组件 → 细节面板:
- 生成击中事件:勾选
Generate Hit Events
- 生成击中事件:勾选
2. 敌人 Capsule 碰撞设置(BP_Enemy)
- Capsule 组件 → 碰撞预设:Pawn
- 确保碰撞通道对 Projectile 为 Block,否则子弹穿透不触发命中
五、完整测试流程
- 编译全部蓝图(BP_Projectile、BP_Enemy)
- 关卡中拖拽放入
BP_Enemy敌人 - 点击运行,鼠标左键发射子弹击中敌人
- 现象验证:
- 命中敌人 → 敌人触发
Event Point Damage扣血 - 击中头部骨骼,伤害倍率提升
- 命中点生成血液粒子特效
- 血量归零时敌人播放死亡动画并销毁
- 命中敌人 → 敌人触发
六、常见踩坑解决
- Event Point Damage 完全不触发
- 子弹未调用
Apply Point Damage; - 碰撞通道设置为 Overlap/Ignore,没有 Block;
- 子弹组件未开启
Generate Hit Events。
- 子弹未调用
- Bone Name 为空,无法区分头部
- 敌人模型必须绑定骨骼,Capsule 碰撞无法读取骨骼;
- 命中的是胶囊碰撞体而非 Skeletal Mesh,修改子弹碰撞只阻挡骨骼网格体。
- 多人联机伤害失效
Apply Point Damage必须在服务端执行(添加 Has Authority 分支判断);- 血量变量开启复制(Replicate),保证客户端同步。
- 命中特效不显示
- Hit Location 连线错误,未使用 Break Hit Result 的 Impact Point;
- 粒子资源未赋值、缩放为 0。
七、拓展进阶用法
- 近战武器点伤害
近战不使用子弹,在攻击动画通知中执行射线检测(Line Trace),命中目标后直接调用
Apply Point Damage,触发敌人Event Point Damage。 - 环境点伤害(爆炸碎片)
爆炸碎片命中物体时调用 Apply Point Damage,在可破坏网格、角色上接收 Event Point Damage 实现碎块伤害。
- 伤害过滤
在 Event Point Damage 开头添加分支,通过
Damage Type区分爆炸 / 子弹 / 近战,分别执行护甲减免逻辑。
感谢您的来访,获取更多精彩文章请收藏本站。
THE END

















暂无评论内容