C# 选择特定的预制件

C# 选择特定的预制件,c#,unity3d,collision,C#,Unity3d,Collision,我创建了多个相同的预制克隆,我想销毁我选择的其中一个 首先,我使用raycast2d检测与预置的碰撞和碰撞 if(Input.GetMouseButtonDown(1)) { RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), Vector2.zero); if(hit.collider != nu

我创建了多个相同的预制克隆,我想销毁我选择的其中一个

首先,我使用raycast2d检测与预置的碰撞和碰撞

if(Input.GetMouseButtonDown(1))

        {
            RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), Vector2.zero);
            if(hit.collider != null && hit.collider.gameObject==gameObject){


                health-=PlayerScript.damage;

                if(health<=0){

                    Destroy(hit.collider.gameObject);
                }

            }
        }
我用void OnCollision2DEnter()检查游戏对象和预置之间是否存在碰撞

现在有了不同的问题。游戏对象不会与其他预制件碰撞,因为

我希望,我能描述我的问题。
我正在等待您关于选择特定预制件或我的碰撞问题的建议

在场景中的游戏对象(可能是用作控制器的空游戏对象)上类似这样的问题:

请注意,如果使用默认摄影机方向,光线投射的方向应为
-Vector2.up

public class RayShooter : MonoBehaviour
{
    void Update()
    {
        if(Input.GetMouseButtonDown(1))     // 1 is rightclick, don't know if you might want leftclick instead
        {
            RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), -Vector2.up);
            if(hit.collider != null)
            {
                GameObject target = hit.collider.gameObject;
                target.GetComponent<Enemy>().dealDamage(PlayerScript.damage);
                // "Enemy" is the name of the script on the things you shoot
            }
        }
    }
}
public class RayShooter:monobhavior
{
无效更新()
{
如果(Input.GetMouseButtonDown(1))//1是rightclick,不知道您是否希望改为leftclick
{
RaycastHit2D hit=Physics2D.Raycast(Camera.main.ScreenToWorldPoint((Input.mousePosition)),-Vector2.up);
if(hit.collider!=null)
{
GameObject target=hit.collider.GameObject;
target.GetComponent().dealDamage(PlayerScript.damage);
//“敌人”是你拍摄的东西的脚本名称
}
}
}
}
在你射击的东西上(这里称为“敌人”):

公共类敌人:单一行为
{
int health=10;
公共无效释放损害(整数值)
{
健康-=价值;

如果(健康第一,
prefact
在你的资源中,而不是在场景中(这只是一个正式的东西,与你的问题无关)。你的raycast脚本是否在你的prefact的每个实例上?如果是,你应该将其更改为一个专用的游戏对象(某种控制器)。否则,每个克隆将在您只需要执行一次的情况下执行该脚本。是的,raycast脚本位于我的预置上的每个实例上。我尝试添加一个在MouseOver上激活的布尔控制器,如果布尔控制器为真,则对象将失去运行状况。但是,其他克隆也会失去运行状况,当鼠标在其上时,它们将被销毁。可以吗你对分拣控制器有什么建议吗?因为不管我怎么做,它都不起作用。
public class RayShooter : MonoBehaviour
{
    void Update()
    {
        if(Input.GetMouseButtonDown(1))     // 1 is rightclick, don't know if you might want leftclick instead
        {
            RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), -Vector2.up);
            if(hit.collider != null)
            {
                GameObject target = hit.collider.gameObject;
                target.GetComponent<Enemy>().dealDamage(PlayerScript.damage);
                // "Enemy" is the name of the script on the things you shoot
            }
        }
    }
}
public class Enemy : MonoBehaviour
{
    int health = 10;

    public void dealDamage(int value)
    {
        health -= value;
        if(health <= 0)
        {
            Destroy(gameObject);
        }
    }
}