Noticias

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

Rotación rara, problema con cámara

Iniciado por Null, Marzo 19, 2018, 06:45:48 PM

Tema anterior - Siguiente tema
Hola! Cómo están?


Tengo un pequeño problema con un script que hice.

Lo único que hace es limitar el ángulo de rotación de la cámara en Y, pero única y exclusivamente al saltar.

Funciona genial, pero he notado que al pasar por el 'grado' 0 (ó -0), hace un giro muy extraño y repentino.


He exagerado un poco el salto del player para hacer un corto de ejemplo.
El cubo verde representa la rotación 0:
https://i.gyazo.com/06151e526fa4f9e3e0ecc557eb60abae.mp4


Nótese como el primer salto es correcto, funciona bien. Pero el segundo... al pasar por el 0 (cubo verde) hace un giro extraño al momento de volver a saltar.

Lo que acaban de ver en ese vídeo también ocurre si giro en la dirección contraria a las agujas del reloj.
 
El mencionado script está colocado en el player y así es como se lee:
 

if (!controller.isGrounded)
{
  cameraController.Yaw = Mathf.Clamp(cameraController.Yaw, transform.localEulerAngles.y - 20, transform.localEulerAngles.y + 20);
}

 
Ese es todo el código que hice al respecto para lograr esa funcionalidad, así que me imagino que es él quien está mal.

A mi corto modo de ver, es como que al estar en números positivos y al pasar a negativos (y viceversa), es cuando se vuelve loco.


No sé cómo podría solucionarlo y por eso hago este post

Muchas gracias por su amabilidad.

hola
 
euler angles es un valor tipo "repeat", es decir, al pasar de 359.9999 grados vuelves al 0.... con lo cual gira (da una vuelta entera) en sentido contrario al que estabas girando.... para voover a ser cero.... 
 
 
 
del mismo modo si el valor es 0 (cero) y le restas 1 (uno).... pasara a ser 359.... y en vez de girar un grado a la izquierda, girara 359 a la derecha....
 
 
 
prueva con:
 

transform.Rotate(0f,20f,0f);
o puedes hacerlo "lerpeaeo" (Lerp) (suave)
Quatenion oldRot = transrorm.rotation;
transform.Rotate(0f,20f,0f);
transform.rotation = Quaternion.Lerp(oldRot, transform.rotation, 0.1f);

 
 

Yo no uso nunca (si puedo) eulerAngles sobretodo para limitar angulos, simplemente no confío en ellos, traen algunos problemas.
 
https://docs.unity3d.com/Manual/QuaternionAndEulerRotationsInUnity.html
 
Por eso podés llevar registro de tu rotación actual, y cada vez que le das al mouse cambiar un valor, verificar que el valor a aplicar es correcto y luego aplicarlo. Acá un ej con dos tipos de límites, lo hice aca, así que no prometo que ande.
 
https://ghostbin.com/paste/4omt7

Etiquetas: