Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Raycast To Destroy Object Requires Double Click?

Discussion in 'Scripting' started by TheChronicPhenix, Jun 29, 2015.

  1. TheChronicPhenix

    TheChronicPhenix

    Joined:
    Jan 14, 2010
    Posts:
    874
    So essentially I'm just attempting to very simply have it so I can click on an object in the scene and then destroy it, I realize there's the whole OnMouseDown thing but for how I am going to be building this project latter on I need the added functionality that the raycast method provides. Now for some reason completely inexplicable to me, when I run this script and click on gameobjects (with the correct tag and colliders) it won't destroy it. I have to click each object individually twice in order for it to be destroyed, the ammo counter goes up on each click, I've even had debug statements and tried moving around the Destroy code. Each object has to be clicked twice. And each gameobject seems to remember how many times it's been clicked, so if I click on one object then go click somewhere else in the scene and back to that object it will be Destroyed, it is really boggling my mind. I'm sure it's probably something really simple, but I cannot figure it out. Any help would be great, thanks.

    Code (csharp):
    1.  
    2.  using UnityEngine;
    3.     using System.Collections;
    4.    
    5.     public class Player : MonoBehaviour {
    6.    
    7.         public int ammo;
    8.         RaycastHit hit;
    9.         bool S***;
    10.    
    11.         // Use this for initialization
    12.         void Start () {
    13.        
    14.         }
    15.        
    16.         // Update is called once per frame
    17.         void Update () {
    18.             if (Input.GetButtonDown ("Fire1")) {
    19.                 Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    20.    
    21.                 if (Physics.Raycast (ray.origin, ray.direction, out hit)) {
    22.                     if (hit.collider.tag == "Shuriken") {
    23.                         Destroy (hit.collider.gameObject);
    24.                         ammo++;
    25.                     }
    26.                 }
    27.             }
    28.         }
    29.     }
    30.  
     
  2. TheChronicPhenix

    TheChronicPhenix

    Joined:
    Jan 14, 2010
    Posts:
    874
    So I'm guessing this is just some weird bug and not a problem with my code?
     
  3. Defero

    Defero

    Joined:
    Jul 9, 2012
    Posts:
    200
    This is a strange one yeah, can you maybe paste the output of this. And what it outputs when you clicked on the object.

    Code (CSharp):
    1. using UnityEngine;
    2.     using System.Collections;
    3.  
    4.     public class Player : MonoBehaviour {
    5.  
    6.         public int ammo;
    7.         RaycastHit hit;
    8.         bool S***;
    9.         int clicks = 0;
    10.  
    11.         // Use this for initialization
    12.         void Start () {
    13.      
    14.         }
    15.      
    16.         // Update is called once per frame
    17.         void Update () {
    18.             if (Input.GetButtonDown ("Fire1")) {
    19.                 clicks++;
    20.                 Debug.Log("Click : " + clicks.ToString());
    21.                 Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    22.  
    23.                 if (Physics.Raycast (ray.origin, ray.direction, out hit)) {
    24.                     Debug.Log("Tag : " +hit.collider.tag);
    25.                     if (hit.collider.tag == "Shuriken") {
    26.                         Debug.Log("Called destroy");
    27.                         Destroy (hit.collider.gameObject);
    28.                         ammo++;
    29.                     }
    30.                 }else{
    31.                   Debug.Log("miss");
    32.                 }
    33.             }
    34.         }
    35.     }
     
  4. TheChronicPhenix

    TheChronicPhenix

    Joined:
    Jan 14, 2010
    Posts:
    874
    I apologize for missing your reply, didn't get an email about it and didn't figure anyone was gonna answer. I am now even more confused as when I did the simple OnMouseDown method, it still requires me to click on each sphere twice. I tested your code and the result on a single sphere (which I had to click twice to destroy) "Click : 1, Tag : Shuriken, Called destroy, Click : 2, Tag : Shuriken, Called destroy"). This is really bizarre, I even recreated the project to see if it was just some random problem like that.
     
  5. Defero

    Defero

    Joined:
    Jul 9, 2012
    Posts:
    200
    This is a strange one yes. The destroy is called and it's unlikely that destroy is bugged.

    Just for sanity check, you are sure that two Shuriken object aren't in the same position? And check if the "hit" has a parent.
     
  6. TheChronicPhenix

    TheChronicPhenix

    Joined:
    Jan 14, 2010
    Posts:
    874
    Oh gosh I feel really stupid now haha, I haven't done any programming in awhile and for the Enemy I was using an IEnumerator for the main loop which I of course started with StartCoroutine, but of course I also named it Main, without thinking anything of it. So I had it running twice... Lol thanks for the help, it's all working correctly now