Raycasting is running in two different objects with the same Tag when I touch just one of them
Hi guys.
I'm pretty sure this is a silly question, but I've been squeezing my brain all day without results.
I have two objects in my 3D scene with the same tag ("Pin"). They're two simple spheres and everyone has the next .cs component:
 public class Pin : MonoBehaviour {
 
     [SerializeField]
     private string sceneRelated;
 
     // Update is called once per frame
     void Update () 
     {
         if (Input.GetMouseButtonDown(0))
         {
             Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
             RaycastHit hit;
 
             if (Physics.Raycast(ray, out hit))
             {
                 if (hit.collider.gameObject.tag == "Pin")
                 {
                     Debug.Log ("You hit a Pin SceneRelated: " + sceneRelated);
                 }
             }
         }
     }
 }
Now, when I touch one of the spheres, both of them run the event although they are in different positions.
I really appreciate any suggestions.
Answer by tonOnWu · Mar 02, 2018 at 01:05 AM
Oh my god. It's bad to be exhausted. As I thought the answer was very simple. My first error was that I locate the Raycast analysis component inside Pin and that component was assigned to every Sphere. The Pin component should not made the Raycast analysis. So I removed all the Raycasts from the Pin component and create a new object (just one) to make the Pin Analysis. This new object include this component:
 public class RaycastOnObjects : MonoBehaviour {
 
     // Update is called once per frame
     void Update () {
         if (Input.GetMouseButtonDown(0))
         {
             //            Debug.Log ("You're touching: " + sceneRelated);
             Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
             RaycastHit hit;
 
             if (Physics.Raycast(ray, out hit))
             {
                 if (hit.collider.gameObject.tag == "Pin")
                 {
                     Pin pinObject = hit.collider.gameObject.GetComponent<Pin> ();
                     if (pinObject != null)
                     {
                         Debug.Log ("You hit the object for Scene: " + pinObject.sceneRelated);
                     }
                     Debug.Log ("You hit a Pin FROM RAYCASTING ");
                 }
             }
         }
     }
 }
And, final version of the Pin component was like this:
 public class Pin : MonoBehaviour {
 
     public string sceneRelated;
 
     // Update is called once per frame
     void Update () 
     {
 
     }
 
 }
Which is basically nothing because all the logic is made inside RaycastOnObjects.
Your answer
 
 
             Follow this Question
Related Questions
Cursor not staying centered to gameobject 0 Answers
Raycast Not Detecting Hit 0 Answers
How to actually make raycast hit colliders it s starting from? 1 Answer
Multiple raycasts and only two are working 0 Answers
Ignore Raycast not working properly? 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                