top of page

Unity - Rotaciones 1

La Rotación de un Objeto en Unity, al igual que en el mundo real es el cambio de posicion de sus partes cuando giran en torno a un eje( rotacion simple) o a varios (rotacion compleja). La rotación simple queda definida entonces, por un ángulo de rotación y un eje de rotación. La rotación compleja se define como la suma de varias rotaciones simples.

A primera vista, puede parecer que la rotación en torno a los ejes clásicos ( X, Y, Z ) sea la forma mas sencilla de hacer gira un objeto. Sin embargo, enseguida nos damos cuenta de la cantidad de problemas que este método acarrea.

 

Para empezar, tan solo guardar la rotación realizada ya puede ser un problema, puesto que el orden en el que se realicen las rotaciones es un factor muy importante. Es decir, no obtenemos la misma rotacion si primero giramos el objeto en torno al eje X y despues en torno al eje Y, que si primero lo hacemos en torno al eje Y y despues en torno al eje X. De manera que simplemente guardar la rotación como X=10 grados y Y=20 grados no es suficiente. Es necesario definir también el orden de rotación.

 

Otro problema está en las animaciones. A diferencia que en las traslaciones, en las que basta definir un punto de origen y un punto de destino, en las rotaciones definidas de esta forma sería necesario establecer también el sentido de giro.

 

Afortunadamente existe una forma más eficaz de representar una rotación: los Cuaterniones.

 

A diferencia de los Vectores , que tienen tres componentes"x, y ,z" , a los Cuaterniones se les añade un cuarto compononte "w", permitiendo representar un eje de rotación y un ángulo al mismo tiempo.

 

Los Cuaterniones tienen tras ellos una potente base matemática que permite crear, manipular y  concatenar varias rotaciones realizando unas pocas operaciones que cualquier computadora de hoy en dia puede realizar sin dificultad. Sin embargo, para realizar estas operaciones es mejor recurrir a las funciones que Unity incorpora en su engine puesto que las cuatro componentes de un Cuaternion están intimamente relacionadas y entrelazadas. NUNCA se debe manipular los componentes de un Cuaternion directamente.

 

Unity dispone de todo un abanico de funciones y propiedades relacionadas con la rotación, destinadas a ser usadas en diferentes situaciones, estas son algunas de ellas:

 


GameObject.Transform.rotation

 

La propiedad "rotation" esta incluida en todos los objetos de Unity que sean susceptibles a ser rotados. Se trata de el cuaternión que define la rotación que el engine de unity aplica a dicho objeto. Es una propiedad de lectura y escritura, así que puede ser grabada con los valores calculados con cualquier método conveniente. Transform.rotation ES la rotación del objeto.

 

Quaternion.AngleAxis

 

El método AngleAxis es una de las funciones más útiles de todo el arsenal de Unity relacionada con las rotaciones. Permite crear un Quaternion que represente cualquier rotacion en torno a cualquier eje.

El eje es recibido por la función en forma de Vector y la rotación es recivida en grados.

 

Quaternion.operator *

 

Una vez encontrado el Quaternion adecuado es posible que se llegue a la conclusion de que el Objeto ha de ser rotado en torno a más de un eje. Uno de los milagros de los cuaterniones es la facilidad para encadenar rotaciones, matemáticamente, basta con multiplicar dos rotaciones para obtener un nuevo cuaternión que sea resultado de aplicarlas.

Pero, !cuidado! la multiplicación de cuaterniones no tiene propiedad conmutitiva!... No es lo mismo rotar primero en torno a un eje A y después en torno a un eje B que hacerlo al revés. La multiplicación de cuaterniones en Unity se calcula siempre de izquierda a derecha.

Oscar R. Parga

© 2023 by IT SERVICES.  Proudly created with Wix.com

  • facebook-square
  • Twitter Square
  • google-plus-square
bottom of page