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 (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 (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 (https://ghostbin.com/paste/4omt7)