Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Cámara en tercera persona, punto de mira y raycast

Iniciado por rogerdv, Febrero 05, 2016, 06:26:47 PM

Tema anterior - Siguiente tema
Hace un par de días hice un alto en mi proyecto principal para variar un poco y dediqué unas horas a implementar una cámara en tercera persona similar a la de Mass Effect/The Witcher 3. O sea, el mouse permite dirigir la cámara en cualquier dirección, y al avanzar el personaje se rota en la dirección que mira la cámara. Mi método quizás no sea el mejor, pero fue lo que se me ocurrió con mis modestos conocimientos de matemáticas y consiste en tener un gameobject pivote que es el padre de la cámara y se encarga de las rotaciones. El jugador es otro gameobject que a su vez se desplaza, arrastrando el pivote tras de sí.El freelook lo manejo con el siguiente código:
void Update () {
   GameObject go = GameObject.Find ("Label");
   
   if (Input.GetAxis ("Mouse X") != 0 || Input.GetAxis ("Mouse Y") != 0) {
      
      float rotationX = gameObject.transform.localEulerAngles.y + Input.GetAxis("Mouse X") * 2f;

      rotationY += Input.GetAxis("Mouse Y") * 5f;
      
      gameObject.transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      RaycastHit hit;               
      Ray ray =  cam.ScreenPointToRay (Input.mousePosition);
      if (Physics.Raycast (ray, out hit, 100)) {
            
         var label = go.GetComponent<Text>();
         label.text = "Press E to interact with "+hit.collider.name;
      } else {
         var label = go.GetComponent<Text>();
         label.text = "";
      }
   }
}
Las cosas funcionan bien hasta la parte del control de la cámara. Donde se fastidia, es que no consigo implementar un raycasting preciso que me retorne los objetos que están en línea con el centro de la pantalla, donde supuestamente debería poner una cruz o algo así (al;go que aún no sé cómo hacer). Pensé que lo había conseguido aquí en la oficina, pero cuando lo probé en casa, para nada, el raycast me retorna objetos que están a la izquierda del personaje, o en cualquier dirección menos en la "línea central".Alguien me puede ayudar a corregir estos problemas?

http://dsgp.blogspot.com">Divagaciones sobre programación y juegos



Primero quita el esto y pongo en el Start!!! text  = GameObject.Find ("Label"). Get Component<Text>() ;Y luego puedes tranquilamente hacer text.text, porque es un gran error  lo que estabas haciendo. Y luego el ScreenPointToRay siempre te devuelve las coordeadas con respecto al puntero,  deberias utilizar el centro de la camara con un vector forward para tal fin. Revisa la documentacion de Unity y utiliza Debug para ayudarte. 

Cierto! No me fijé en las funciones de la cámara. Y lo otro fue una chapuza rápida que hice, además de que no sabía que era un disparate tan grande, gracias por aclararlo! 

http://dsgp.blogspot.com">Divagaciones sobre programación y juegos



Etiquetas: