Unity开发求助:史莱姆生命值≤0时无法被销毁的问题
问题排查与解决方案
核心问题分析
你的代码中,当HP归零时仅触发了击败动画,但没有自动调用销毁物体的RemoveEnemy()方法——除非你在动画剪辑中手动添加了调用该方法的事件,否则物体不会消失。此外还有几个潜在问题需要排查:
1. 动画事件未配置
Defeated()方法只是给Animator设置了"Defeated"触发器,但动画播放过程中不会自动执行RemoveEnemy()。你需要在动画剪辑中添加事件:
- 打开击败动画的剪辑
- 在时间轴上找到你希望销毁物体的帧(通常是动画结束前的位置)
- 右键添加事件,选择当前Enemy脚本的
RemoveEnemy()方法
2. 直接修改了health字段而非Health属性
如果外部代码直接修改了public float health字段(比如写enemy.health -= damage;),而不是通过Health属性(enemy.Health -= damage;),那么setter里的health <=0判断逻辑不会执行,自然不会触发Defeated()。
修复方式:把public float health = 1;改为私有,强制外部通过属性访问:
private float health = 1; // 改为私有,避免直接修改
3. 动画触发器或状态配置错误
检查Animator Controller:
- 确认存在名为"Defeated"的触发器参数
- 确认动画状态机中,从Idle/Run状态到Defeated动画的过渡条件正确绑定了该触发器
- 确认Defeated动画的"Loop Time"未勾选(避免动画循环播放,无法走到结束帧的事件)
额外优化建议
可以在Defeated()中添加防止重复触发的逻辑,避免多次调用动画:
public void Defeated(){ if (health <= 0 && !animator.GetCurrentAnimatorStateInfo(0).IsName("Defeated")) { animator.SetTrigger("Defeated"); } }
内容的提问来源于stack exchange,提问作者PBGgming
相关产品推荐
相关产品推荐

