因此,我有一个脚本在场景中生成敌人。每个敌方游戏对象上都有一个敌方脚本,可以检测到点击或鼠标单击。
当检测到对敌人的点击时,生命值会降低,如果低于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
适用于场景中的所有敌人,而不是我单击的位置?
有什么想法吗?
谢谢
答案 0 :(得分:3)
此行:if (hit.transform.tag == "Enemy")
仅检查射线是否击中了敌人(“天哪,他们射中了鲍勃!”)。要查看光线是否自动命中 ,您想使用if(hit.transform == this.transform)
(“我被枪杀了!”)。
或者更好的是,不要将此代码附加到您的所有敌人(10000个敌人,10000个射线!)上,并且将 one 脚本附加到执行现有检查的摄像机之类的东西上,但是将health--;
行替换为hit.transform.GetComponent<Enemy>().Damage()
,这只会对鼠标指向的敌人造成伤害。