Noticias

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

Problemas con las rotaciones

Iniciado por Parich, Julio 18, 2015, 12:42:46 AM

Tema anterior - Siguiente tema
Buenas, estoy algo desesperado ya que desde hace 2 días no puedo trabajar con Unity ya que al rotar objetos me hace algo sumamente extraño. Me explico:Creo una cápsula y la hago rotar en el eje X, pues bien, cuando la roto hacia un lado y hacia el otro se me añaden valores enteros a los ejes Y y Z, sin venir a cuento, lo extraño es que son valores enteros empezando en 180º y sumándose exponencialmente cada cierto tiempo aunque rote solo unos grados en el ejeX y vuelva a la posición inicial. Me aseguro que solo muevo el eje X ya que con los demás ejes no ocurre.¿Me podéis ayudar? estoy intentando terminar mi proyecto fin de curso y por esto no puedo acabarlo. Muchas gracias de antemano 

Julio 18, 2015, 07:35:54 PM #1 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
¿Qué inconveniente hay con que la información del inspector? ¿por qué es un problema? Al girar un eje, efectivamente puede variar la información de rotación de los otros 2 ejes simplemente para mantener un poco la lógica de la rotación de acuerdo a como estás rotando el objeto en la interfaz. (Yo veo que estoy girando el eje verde, pero si mi cápsula está apuntando 45º ald polo noroeste, pues por mucho que gire mi eje "verde" en verdad estoy girando las otras variables también para mantener esa posición de 45º). En fin, no veo nada malo en ello. 

¿Qué es lo que tienes que hacer? (¿Por qué esto te impide continuar?).

Hola Adngel, creo que no me he expresado bien. El problema es que solo ocurre cuando giro el objeto en el eje X. Cuando llega a 90º se giran los ejes Z e Y a -180º de golpe y sin venir a cuento, cuando vuelo a 0 en el eje X, se suman -180º a los otros 2 (No hay rotación en los otros ejes hasta que llega a 0) y así hasta el infinito. Se lo que dices ya que llevo haciendo 3D desde el año 2002, pero no es el caso, en un principio si pensé que fuera eso, pero no, puedo asegurarte que no, ya que si fuera por eso, al rotar en el ejeZ, también ocurriría.  No puedo continuar porque no puedo hacer animaciones sencillas, por ejemplo, no puedo crear código con referencia a los ejes de rotación ya que cada vez que el eje X pasa de 90 º, los otros 2 también cambian, lo cual es un problema muy grande visualmente y de orientación del objeto... etc, etc. El caso es que no se cual puede ser el problema, porque lo ha probado ya en 3 ordenadores distintos con distintos sistemas operativos y en los 3 casos pasa. He subido un video cutre para que veáis lo que ocurre.  https://www.youtube.com/watch?v=7sbfwUL2z1E. Gracias por la respuesta.

Julio 18, 2015, 09:37:04 PM #3 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Anda que guay, a mi también me pasa. Wiiii!!!

Bueno, si la animación la hacer por un programa externo no debería afectar, pues el valor de las rotaciones, lo coge del keyframes, y aunque alguno se desbordase, al siguiente keyframe se actualizarían.

Si la animación la haces por código, pues, con fallo o sin fallo tendrás que cuidarte del desbordamiento, algo como: 
 
xRotation += Input.GetAxis("Vertical");
yRotation += http://docs.unity3d.com/ScriptReference/Input.GetAxis.html" rel="external nofollow">Input.GetAxis("Horizontal");
zRotation += 10 * Time.Deltatime;

if (xRotation > 360) xRotation - 360;
if (xRotation < -360) xRotation + 360;
if (yRotation > 360) xRotation - 360;
if (yRotation < -360) xRotation + 360;
if (zRotation > 360) xRotation - 360;
if (zRotation < -360) xRotation + 360;

transform.eulerAngles = http://docs.unity3d.com/ScriptReference/Vector3.html" rel="external nofollow">Vector3(xRotation,yRotation, zRotation);
Te diría que usaras la función Clamp, que evita que las cosas se salgan del rango definido: ( http://docs.unity3d.com/ScriptReference/Mathf.Clamp.html )
Pero creo que necesitas que el objeto siga rotando a pesar de llegar al 360º, por eso lo puse con el if.

Muchas gracias, probaré a ver que tal, de momento estoy dejando los objetos estátitcos, a ver si corrigen el error en la próxima versión, pero es buna solución la que propones. Muchas gracias.

Etiquetas: