Raycast To Destroy Object Requires Double Click?

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.

 using UnityEngine;
    using System.Collections;
   
    public class Player : MonoBehaviour {
   
        public int ammo;
        RaycastHit hit;
        bool sHit;
   
        // Use this for initialization
        void Start () {
       
        }
       
        // Update is called once per frame
        void Update () {
            if (Input.GetButtonDown ("Fire1")) {
                Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
   
                if (Physics.Raycast (ray.origin, ray.direction, out hit)) {
                    if (hit.collider.tag == "Shuriken") {
                        Destroy (hit.collider.gameObject);
                        ammo++;
                    }
                }
            }
        }
    }

So I’m guessing this is just some weird bug and not a problem with my code?

This is a strange one yeah, can you maybe paste the output of this. And what it outputs when you clicked on the object.

using UnityEngine;
    using System.Collections;
  
    public class Player : MonoBehaviour {
  
        public int ammo;
        RaycastHit hit;
        bool S***;
        int clicks = 0;
  
        // Use this for initialization
        void Start () {
      
        }
      
        // Update is called once per frame
        void Update () {
            if (Input.GetButtonDown ("Fire1")) {
                clicks++;
                Debug.Log("Click : " + clicks.ToString());
                Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
  
                if (Physics.Raycast (ray.origin, ray.direction, out hit)) {
                    Debug.Log("Tag : " +hit.collider.tag);
                    if (hit.collider.tag == "Shuriken") {
                        Debug.Log("Called destroy");
                        Destroy (hit.collider.gameObject);
                        ammo++;
                    }
                }else{
                  Debug.Log("miss");
                }
            }
        }
    }

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.

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.

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