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?

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