- Home /
 
All objects response to one touch
Hi !
I have some objects which are going to be menu items, so I made them touchable. The problem is, when I touch one of them, all of them respond they were touched.
I paste the code:
bool IsTouched() { int touchNumber = 0; bool touched = false; RaycastHit hit = new RaycastHit(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
                if (Physics.Raycast(ray, out hit)) {
     //print("mouse hit:" + hit.point.ToString());
     //selection.transform.Translate(hit.point - selection.transform.position);
     touched = true;
 }
 if (Input.touchCount > 0)
 {
     touched = false;
     Ray rayios = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
     foreach (Touch t in Input.touches)
     {
         rayios = Camera.main.ScreenPointToRay(t.position);
         Debug.Log("checking touch " + touchNumber);
         if(Physics.Raycast(rayios, out hit))
         {
             Debug.Log("touch number "+touchNumber+" HIT!!!");
             touched = true;
         }
         touchNumber++;
     }           
     if (Physics.Raycast(rayios, out hit)) {
         //print("touch hit:" + hit.point.ToString());
         //selection.transform.Translate(hit.point - selection.transform.position);          
         touched = true;
     }
 }       
 return touched;     
  
               } 
I do all the work on Mac and iOS. This script is attached to prefab for all my menuitems, but only touched instance should respond. What am I doing wrong?
if(Physics.Raycast(rayios, out hit))
 
                
                
               This should give a positive value only when particular instance is touched. Or maybe I am wrong, am I?
Answer by Henrique Vilela · May 05, 2011 at 01:23 PM
Physics.Raycast will return TRUE if there is any object on the ray. You need to check if the returned object is your actual object, like this:
if (Physics.Raycast(ray, out hit)) {
    if (hit.collider.gameObject == gameObject)
        // Touched
    }
}
 
              I just managed it in a way like this: if (this.collider.Raycast(ray, out hit, 10000)) but yours look nicer
Your answer
 
             Follow this Question
Related Questions
Touches don't respond correct 2 Answers
I want to destroy the top object from a stack of objects on touch, not all objects. 1 Answer
Multitouch problem in Unity iPhone 2 Answers
Develop a game in team, do we have to buy unity iphone everyone? 1 Answer
translating a touchDeltaPosition from the y axis to z axis 1 Answer