You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:11:26