Search code examples
unity-game-enginedestroy

Unity 2D: How to destroy just one prefab clone when clicked on


so I have a problem :D. I created a simple script that will instantiate a prefab of a ball on mouse coords when clicked onto the screen. Then I went on and created a second script. In the second script, wich was attached on the prefab of a ball, I tested for mouse click, when that happened I deleted a GameObject ball. I assigned the ball prefab to the GameObject variable ball. The only problem is (also the reason why this is not a dulplicate question, atleast I hope..) that when I click on the ball it deletes all the balls. I know that its happening because they are all basically just one prefab. I thought Ill solve it by giving seperate name to each prefab cline and then deleting them by name, but Im pretty shore unity has a better solution. I dont mind javascript or c# solutions, thanks!

PS: Im using the Destroy method.


Solution

  • Sounds like you are listening to a mouse click in your second script but not checking if you're clicking on the ball. Instead you should be checking if the mouse is hitting your ball by casting a ray.

    if (Input.GetMouseButtonDown(0)) 
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if(Physics.Raycast(ray,out hit))
        {
            if(hit.collider.gameObject==gameObject) Destroy(gameObject);
        }
    }
    

    edit-> for unity2d:

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