113. ESTRUCTURA QUATERNION



Nuestros amigos los quaterniones son usados para representar rotaciones. Unity internamente usa Quaterniones para representar todas las rotaciones.

Sin embargo, los quaterniones están basados en números complejos y no son fáciles de entender intuitivamente, así que casi nunca accederemos o modificaremos los componentes individuales de un Quaternión (x,y,z,w). Lo que será más habitual es que queramos meramente tomar rotaciones ya existentes (por ej desde un Transform) y usarlas para construir nuevas rotaciones (por ej interpolando suavemente entre dos rotaciones).

Las funciones sobre Quaterniones que usaremos el 99% del tiempo (las otras funciones son para usos exóticos) son Quaternion.LookRotation, Quaternion.Angle, Quaternion.Euler, Quaternion.Slerp, Quaternion.FromToRotation y Quaternion.identity.


VARIABLES:

eulerAngles:

var eulerAngles : Vector3


Devuelve la representacion en ángulos euler de la rotacion.


FUNCIONES:

ToAngleAxis:

function ToAngleAxis (out angle : float, out axis : Vector3): void

Convierte una rotación en una representación de angle-axis (ángulo de eje)


SetFromToRotation:

function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void


Crea una rotación que rota desde fromDirection hasta toDirection.


ToString:

function ToString () : String
function ToString (format : String) : String


Devuelve un string formateado del Quaternion.


VARIABLES DE CLASE:

identity:

static var identity : Quaternion


Sería el equivalente a no rotation. El transform quedará perfectamente alineado con el mundo o con los ejes del padre.


FUNCIONES DE CLASE:

AngleAxis:

static function AngleAxis (angle : float, axis : Vector3) : Quaternion


Crea una rotación que rota los ángulos que le pasemos como primer parámetro con respecto al eje que le pasamos como segundo.

O sea, para girar nuestro cubo (previamente eliminadle el character controller que le añadimos el capítulo anterior), tecleamos:


transform.rotation = Quaternion.AngleAxis(30, Vector3.up);


De esta forma tan simple giramos el cubo 30 grados sobre el eje Y.


FromToRotation:

static function FromToRotation (fromDirection : Vector3, toDirection : Vector3) : Quaternion

Crea una rotación que rota desde el primer parámetro al segundo.

Normalmente usaremos esta función para rotar un transform uno de cuyos ejes sigue un objetivo en una dirección en coordenadas globales.


Slerp:

static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion


Interpola esfériamente del primer al segundo parámetro durante el tercero.


RotateTowards:

static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta : float) : Quaternion


Efectúa una rotación entre el primer parámetro y el segundo. Esto es esencialmente lo mismo que Quaternion.Slerp, pero aquí la función se aregura de que la velocidad angular nunca exceda de la marcada en maxDegreesDelta. Si maxDegreesDelta tiene un valor negativo la rotación es empujada lejos del segundo parámetro (to).


Angle:

static function Angle (a : Quaternion, b : Quaternion) : float


Devuelve el ángulo en grados entre dos rotaciones dadas.

Veamos eso:


var objetivo : Transform;

function Update () {
var angulo : float = Quaternion.Angle(transform.rotation, objetivo.rotation);
Debug.Log(angulo);
}


Arrastramos la esfera a la variable expuesta objetivo. Si pulsamos play, observaremos que nos aparece un cero en pantalla, ya que (si teneis ambas figuras colocadas como yo) ambas tienen sus respectivas rotaciones a 0,0,0. Probad ahora a cambiar la rotación de una -o las dos- figuras.


Euler:

static function Euler (x : float, y : float, z : float) : Quaternion
static function Euler (euler : Vector3) : Quaternion

Devuelve en quaterniones una rotación pasada como parámetro en grados euler.

POSTED BY UnityScripts
DISCUSSION 4 Comments

4 Responses to : 113. ESTRUCTURA QUATERNION

  1. Anónimo says:

    Hola, soy muy novato en Unity y estoy viendo que tiene infinitas posibilidades, pero es que hay algo que no entiendo: Yo tengo un objeto que es el personaje con una rotación de 0,0,0 y tengo otro objeto mirando a otra dirección, pongamos a 0,45,0. ¿Como puedo meter en una variable el angulo que tiene el objeto para despues usar la variable para que el personaje gire a 0,45,0?. Es lo mas básico lo que no entiendo, crear una variable que me de el angulo 45 del objeto.

  2. Unknown says:

    Tutorial básico de Quaternion en Unity:
    https://youtu.be/B58A1qkEkik

  3. Unknown says:

    Soy novato, tengo la misma duda. Si ya has descubierto una solución por favor dímela.

Leave a Reply

Con la tecnología de Blogger.