x


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?

more ▼

asked May 05 '11 at 12:34 PM

pro_metedor gravatar image

pro_metedor
33 6 6 13

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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
    }
}
more ▼

answered May 05 '11 at 01:23 PM

Henrique Vilela gravatar image

Henrique Vilela
318 11 14 19

I just managed it in a way like this: if (this.collider.Raycast(ray, out hit, 10000)) but yours look nicer

May 05 '11 at 01:48 PM pro_metedor
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3885
x2013
x606
x30

asked: May 05 '11 at 12:34 PM

Seen: 1092 times

Last Updated: May 05 '11 at 12:34 PM