2016-09-12 3 views
0

J'essaie de convertir un événement souris en événement VR Raycast.Input.mousePosition.x ou équivalent sur Raycast avec le canevas World Space

J'ai Input.mousePosition.x & Input.mousePosition.y comme coordonnée d'un événement de clic de souris. Je veux appliquer le même événement sur un hit VR Raycast.

J'ai le code suivant

Ray ray = new Ray(CameraRay.transform.position, CameraRay.transform.forward); 
RaycastHit hit; 

if (GetComponent<Collider>().Raycast(ray, out hit, 100)) { 
    Debug.Log ("True"); 
    Vector3 point = camera.WorldToScreenPoint(hit.point); 
} else { 
    Debug.Log ("False"); 
} 

De l'raycast point de frapper, comment puis-je obtenir les coordonnées x-y équivalentes de l'endroit où le rayon frappe le collisionneur?

Mise à jour:

Le script suivant est attaché à un objet sélecteur de couleur dans ma configuration de l'unité pour Google Cardboard. En vol stationnaire sur le sélecteur de couleurs, je veux obtenir les coordonnées de l'endroit où le Raycast frappe le collisionneur (afin que je puisse obtenir la couleur dans cette coordonnée).

enter image description here

Question 1: Au FixedUpdate, j'ai une instruction if if (GetComponent<Collider>().Raycast(ray, out hit, 100)) et il est faux retour. Qu'est-ce que j'oublie ici?

Question 2: Ai-je raison de supposer que si le hit.point est réglé, je pourrais obtenir x, y, z du point où le rayon touche le collisionneur à être le point [0], point 1 et le point [2]?

Répondre

1

Je ne suis pas un grand expert en VR dans Unity, mais vous utiliseriez habituellement Camera.WorldToScreenPoint à ces fins. Pour utiliser l'appareil photo principal, utilisez ces lignes:

Ray ray = new Ray(CameraRay.transform.position, CameraRay.transform.forward); 
RaycastHit hit; 

if (GetComponent<Collider>().Raycast(ray, out hit, 100)) { 
    Vector3 point = camera.WorldToScreenPoint(hit.point); 
} 

La valeur z vous donne la distance de la caméra, au cas où vous étiez intéressé par cela. La documentation de l'unité: https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html

EDIT:

Question 1:

RaycastHit hit; 

if (Physics.Raycast(CameraRay.transform.position, Vector3.forward, out hit)) { 
    Debug.Log ("True"); 
    Vector3 point = camera.WorldToScreenPoint(hit.point); 
} else { 
    Debug.Log ("False"); 
} 

tentative en utilisant ce code à la place, de ce que j'ai lu, Physics.Raycast() est presque toujours mieux utiliser que Collider.Raycast().

Question 2:

Vector3[] point = new Vector3[3] {hit.point.x, hit.point.y, hit.point.z}; 

Cela crée un tableau qui a le point nommé les trois variables affectées, bien que la coordonnée z peut être mis au rebut pour une utilisation sur une roue de couleur 2D.

+0

J'ai essayé d'implémenter ceci, le code 'if (GetComponent () .Raycast (rayon, out hit, 100))' cependant retourne 'false'. Auriez-vous une idée de ce qui se passe? Semble mon code précédent avait également le même problème – ptamzz

+0

Attendez une seconde. Pourquoi utilisez-vous même Collider.Raycast()? Physics.Raycast() est ce que vous utiliseriez habituellement. Je ne peux pas vraiment faire une recherche détaillée pendant que je ne suis pas à la maison, mais essayez-le. –

+0

Essayé 'Physics.Raycast (ray, out hit, 100)' aussi mais n'a pas fonctionné. C'est manger ma tête! Merci de m'avoir aidé. – ptamzz