角色死亡布娃娃效果

核心思路:

将角色从“动画驱动”瞬间切换为“物理模拟驱动”。关键点在于关闭动画对骨骼的控制权,让物理引擎接管,同时切断摄像机碰撞和角色移动逻辑。

实现步骤(蓝图):

创建死亡事件(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中的变量存储,便于外部更新。

实现步骤(蓝图)

  1. BP_Character:死亡触发重生请求
    在 Dead 自定义事件末尾(关闭物理、移动、摄像机碰撞后):

添加 Delay 节点,设为 2.0 秒(布娃娃倒地时间)。

延迟后,不要直接销毁Actor,改为调用GameMode的重生逻辑:

获取 Get Game Mode → Cast To BP_GameMode。

从 As BP_GameMode 引脚调用自定义事件 RequestRebirth(传入自身引用)。

  1. 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 中处理的,绑定后新角色自动响应。

  1. 检查点更新重生位置(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 延迟期间重复触发死亡
重生后物理还在 新生成的角色默认关闭物理,无需额外处理 未重置物理模拟