I never get inside if (Physics.Raycast(ray, out hit,Mathf.Infinity, touchInputMask)

Hi,

What i want to do is when user touch a object he can move it, and its possible to use multitouch

for that i use this code on update

public LayerMask touchInputMask;
private static List<GameObject> touchList = new List<GameObject>();
public static Dictionary<int, objectst> touchobjects = new Dictionary<int, objectst>();

  private GameObject[] touchesOld;
  private RaycastHit hit;
  public GUIText Count, IndexLift;

  private Vector3 targetPos;

  public struct objectst { public Vector3 screenPoint; public Vector3 offset; }

//Handle multi touch
int nbTouches = Input.touchCount;

    if (nbTouches > 0)
    {
        //nbTouches = 5;

        //print(nbTouches + " touch(es) detected");

        touchesOld = new GameObject[touchList.Count];
        touchList.CopyTo(touchesOld);
        touchList.Clear();

        for (int i = 0; i < nbTouches; i++)
        {

            Touch touch = Input.GetTouch(i);

            //print("Touch index " + touch.fingerId + " detected at position " + touch.position);

            Ray ray = Camera.main.ScreenPointToRay(touch.position);

            if (Physics.Raycast(ray, out hit,Mathf.Infinity,  touchInputMask))
            {
                GameObject recipient = hit.transform.gameObject;
                print("#### touch hit name object "+recipient.name);
                touchList.Add(recipient);

                //recipient.;

                if (touch.phase == TouchPhase.Began)
                {
                    print("#### tcouh begin");
                   

                    objectst tempobj = new objectst();
                    tempobj.screenPoint = Camera.main.WorldToScreenPoint(recipient.transform.position);
                    tempobj.offset = recipient.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, tempobj.screenPoint.z));

                    touchobjects.Add(touch.fingerId, tempobj);

                }

                if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved)
                {
                    print("#### tcouh stationary or moved");

                    Vector3 curScreenPoint = new Vector3(touch.position.x, touch.position.y,
                        touchobjects[touch.fingerId].screenPoint.z);
                    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + touchobjects[touch.fingerId].offset;

                    print("#### objet doit être deplacer x = "+curPosition.x+"y = "+curPosition.y);
                    recipient.transform.position = curPosition;

                }
                if (touch.phase == TouchPhase.Ended)
                {
                    print("#### tcouh ended");

                    Vector3 curScreenPoint = new Vector3(touch.position.x, touch.position.y,
                        touchobjects[touch.fingerId].screenPoint.z);
                    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) - touchobjects[touch.fingerId].offset;
                    recipient.transform.position = curPosition;

                }
                if (touch.phase == TouchPhase.Canceled)
                {
                    print("#### tcouh canceled");
                }
            }

        }
        foreach (GameObject g in touchesOld)
        {
            if (!touchList.Contains(g))
            {
               // g.SendMessage("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
            }

        }
    }

The problem is that i never get inside this if (Physics.Raycast(ray, out hit,Mathf.Infinity, touchInputMask)) i can’t undesrstand why, i search everywhere ;(

i was able to resolve the problem like this by using RaycastHit2D :

        RaycastHit2D hit = Physics2D.Raycast(new Vector2(Camera.main.ScreenToWorldPoint(touch.position).x, Camera.main.ScreenToWorldPoint(touch.position).y), Vector2.zero, 0f);

        if (hit.rigidbody != null)

and of course rigidbody of hit are my object i clicked on