所以我有一个脚本在我的场景中生成敌人。每个敌方游戏对象都有一个敌方脚本,用于检测点击或鼠标点击。
当检测到敌人点击时,生命值会下降,如果它低于 0,则游戏对象被摧毁。
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.transform.tag == "Enemy")
{
health--;
if (health <= 0)
Destroy(gameObject);
}
}
}
}
问题是,当我点击一个敌人时,场景中的每个敌人都会受到伤害,而不仅仅是我点击的那个。
想不通这是为什么。至于出于某种原因,raycast
适用于场景中的所有敌人,而不是我点击的位置?
有什么想法吗?
谢谢
因为你从不检查哪个敌人
这行:if (hit.transform.tag == "Enemy")
只检查光线是否击中敌人("哦,天哪,他们射杀了鲍勃!"(。要检查光线是否击中了自己,您希望if(hit.transform == this.transform)
("我被枪杀了!
或者更好的是,不要把这段代码附加到所有的敌人(10000个敌人,10000个光线投射!(,而是将一个脚本附加到像摄像机这样的东西上,该脚本执行现有检查,但用hit.transform.GetComponent<Enemy>().Damage()
替换health--;
行,这只会对鼠标指向的敌人造成伤害。