2026.7.17笔记
角色死亡布娃娃效果
核心思路:
将角色从“动画驱动”瞬间切换为“物理模拟驱动”。关键点在于关闭动画对骨骼的控制权,让物理引擎接管,同时切断摄像机碰撞和角色移动逻辑。、
实现步骤(蓝图):
创建死亡事件(BP_Character)
在角色蓝图事件图表中新建自定义事件,命名为 Dead。
拖出角色的网格体(Mesh)引用,调用 Set Simulate Physics 节点,将 Simulate 勾选为 True。
原理:此操作会激活物理资产(Physics Asset),让骨骼按物理规则运动。
触发死亡(BP_Sphere)
在关卡中的机关蓝图(如 BP_Sphere)里,给球形碰撞体添加 On Component Begin Overlap 事件。
从 Other Actor 引脚拉出 Cast To BP_Character(类型转换),确保触碰的是角色。
转换成功后,调用角色蓝图中的自定义事件 Dead。
扩展:可在此处添加伤害计算逻辑,或替换为武器碰撞/射线检测来触发。
配置物理资产(Physics Asset)
在角色网格体的细节面板中,绑定物理资产(Physics Asset)。
将 碰撞预设(Collision Preset) 改为 PhysicsActor,确保物理模拟能正常与环境碰撞。
修复摄像机卡死(关键)
死亡时,摄像机弹簧臂会因物理碰撞被挤压,导致视角卡在地面或穿模。
在 Dead 事件中,从弹簧臂(Spring Arm) 拉出 Set Do Collision Test 节点,并取消勾选,关闭碰撞测试。
原理:关闭弹簧臂的碰撞探测,摄像机将不再尝试避开障碍物,视角直接跟随角色头部,解决卡顿。
禁用角色移动(避免鬼畜)
在 Dead 事件后,获取 Character Movement 组件。
调用 Set Movement Mode,将 New Movement Mode 设为 MOVE_None。
原因:若不关闭移动组件,物理模拟时角色仍会尝试行走,导致布料与物理系统“打架”,出现抽搐或瞬移。
| 坑点 | 原因 | 解决方案 |
|---|---|---|
| 角色飞向天际 | 物理碰撞通道配置冲突 | 检查物理资产中的碰撞预设,建议将“Pawn”通道设为忽略 |
| 布娃娃抖动严重 | 根骨骼(Root Bone)参与了物理模拟 | 在物理资产中,将根骨骼的Physics Type设为Kinematic(运动学) |
| 复活后无法移动 | 死亡时设的MOVE_None未恢复 | 复活时需用Set Movement Mode重置为MOVE_Walking |
| 销毁后报错 | 延迟销毁时,其他蓝图仍引用该角色 | 销毁前用DetachFromController解除控制器绑定 |
| 子弹冲击力不足 | 未传递速度动量 | 在开启物理前,用Set Physics Linear Velocity传入角色速度,或用Add Impulse在命中点加力 |
角色死亡后重生逻辑
核心思路:
不销毁Actor,而是“重置”它。这样可以保留摄像机、控制器绑定,避免视角丢失和内存碎片。检查点位置用GameMode中的变量存储,便于外部更新。
实现步骤(蓝图)
- BP_Character:死亡触发重生请求
在 Dead 自定义事件末尾(关闭物理、移动、摄像机碰撞后):
添加 Delay 节点,设为 2.0 秒(布娃娃倒地时间)。
延迟后,不要直接销毁Actor,改为调用GameMode的重生逻辑:
获取 Get Game Mode → Cast To BP_GameMode。
从 As BP_GameMode 引脚调用自定义事件 RequestRebirth(传入自身引用)。
- BP_GameMode:管理重生逻辑
(1)新建变量存储检查点
创建变量 SpawnTransform,类型为 Transform。
在关卡中放置检查点(如蓝图 BP_Checkpoint)时,将自身位置写入此变量。
(2)添加 RequestRebirth 自定义事件
输入参数:DeadCharacter(类型为 BP_Character 引用)。
内部逻辑:
销毁旧角色:DeadCharacter → Destroy Actor。
生成新角色:使用 Spawn Actor from Class,Class 选 BP_Character,Transform 用 SpawnTransform 变量。
控制新角色:
获取 Get Player Controller → Control(目标为生成的 Pawn)。
为什么新角色能读取玩家输入?
因为 Control 节点将 PlayerController 绑定到了新 Pawn 上。输入事件(如 WASD)是在 Controller 中处理的,绑定后新角色自动响应。
- 检查点更新重生位置(BP_Checkpoint)
当玩家触碰检查点时:
Get Game Mode → Cast To BP_GameMode。
将自身 Get Actor Transform 赋给 GameMode 的 SpawnTransform 变量。
| 问题 | 解决方案 | 原因 |
|---|---|---|
| 销毁后视角黑屏或飞到原点 | 确保 Control 节点正确执行,且生成的角色 Auto Possess Player 设为 Placed in World | 销毁角色后未重新控制新Pawn |
| 旧角色仍能听到脚步声 | 销毁前调用 Stop All Sounds 和 Disable Input | 未解绑音频组件或Input |
| 死亡时屏幕UI仍显示血条 | UI应从PlayerController获取角色引用,销毁后自动置空或刷新 | UI绑定到旧角色 |
| 连续死亡导致多个角色 | 增加布尔变量 bIsDead,死亡时设为True,重生时重置为False | 延迟期间重复触发死亡 |
| 重生后物理还在 | 新生成的角色默认关闭物理,无需额外处理 | 未重置物理模拟 |





