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