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

Unity中敌人遭单次射击即死亡问题求助(附相关脚本)

问题排查与修复方案

我一眼就看到问题所在了——你在Bullet脚本的HiTarget()方法里把子弹销毁的代码注释掉了!

问题原因分析

当子弹移动到敌人位置时,HiTarget()方法会被触发,执行伤害逻辑。但因为你注释了Destroy(gameObject);,这颗子弹不会被销毁。接下来的每一帧,Update()方法都会检测到子弹和敌人的距离仍然小于等于distanceframe,于是反复调用HiTarget()和Damage()方法。也就是说,一次射击实际上会在短短几帧内连续多次扣除敌人的生命值,直接把血条打空,看起来就像敌人被一枪秒了,而不是你期望的逐步扣血。

修复步骤

只需要恢复HiTarget()方法里的子弹销毁代码即可:

void HiTarget()
{
    GameObject effect = (GameObject)Instantiate(impactEffect, transform.position, transform.rotation);
    Destroy(effect, 1f);
    Damage(target);
    Destroy(gameObject); // 取消这行的注释,让子弹击中后立刻销毁
}

验证效果

修改后,子弹击中敌人后会立即被销毁,只会调用一次Damage()方法,敌人也就只会被扣一次50点生命值。如果你的敌人初始生命值是100,那么第一次射击后会剩余50点血,第二次射击才会触发死亡逻辑,完全符合你期望的逐步扣血效果。

另外可以额外确认下Enemy脚本的startHealth值是否大于Bullet的damage值(你当前设置的100>50是没问题的),确保单次伤害不会直接秒杀敌人。

内容的提问来源于stack exchange,提问作者Ivan Bondarenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:12