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
相关产品推荐
相关产品推荐

