为什么当我只破坏一个敌人时,我的场景中的所有敌人都会受到伤害?

时间:2019-11-24 16:44:32

标签: c# unity3d

因此,我有一个脚本在场景中生成敌人。每个敌方游戏对象上都有一个敌方脚本,可以检测到点击或鼠标单击。

当检测到对敌人的点击时,生命值会降低,如果低于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适用于场景中的所有敌人,而不是我单击的位置?

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:3)

因为您从不检查哪个敌人

此行:if (hit.transform.tag == "Enemy")仅检查射线是否击中了敌人(“天哪,他们射中了鲍勃!”)。要查看光线是否自动命中 ,您想使用if(hit.transform == this.transform)(“我被枪杀了!”)。

或者更好的是,不要将此代码附加到您的所有敌人(10000个敌人,10000个射线!)上,并且将 one 脚本附加到执行现有检查的摄像机之类的东西上,但是将health--;行替换为hit.transform.GetComponent<Enemy>().Damage(),这只会对鼠标指向的敌人造成伤害。