11. CLASE TRANSFORM (II)











eulerAngles:

var eulerAngles : Vector3


Esta variable indica la rotación del transform en grados. Se corresponde plenamente con los valores que aparecen en el apartado rotation de cada transform en el inspector. Los valores de esta variable vienen dados, al igual que los de position, en formato Vector3. Lo que sucede es que un valor de (90,0,0) referido a la posición implica que nuestro transform se desplace 90 unidades a la derecha, mientras que los mismos valores relativos a la rotación implicarían que nuestro transform gire 90 grados (el equivalente a un cuarto de vuelta) sobre el eje X.

Al igual que con la variable position, eulerAngles nos permite consultar individualmente la rotación de nuestro transform sobre un determinado eje. Pero si lo que queremos no es consultar sino cambiar la rotación, deberemos indicar los tres valores vía un Vector3, y Unity los convertirá entonces en los valores que él usa internamente.

Porque -esto no sé si lo he dicho antes- Unity trabaja internamente con Quaterniones, por motivos de rendimiento y exactitud, mientras que a los humanos nos resulta más sencillo hacerlo con grados Euler, así que en la práctica esisten unos "atributos de traducción" que nos permite pasar de quaterniones a grados y viceversa, a fin de que hombres y máquina sigan trabajando con los elementos que mejor se adapten a sus capacidades.

Al igual que con position, existe una variable eulerAngles para funcionar con valores globales (la que estamos estudiando) y otra localEulerAngles que trabaja con valores locales (dependientes del padre del transform que rota)

A esta variable sólo podemos asignarle valores exactos, no de incremento, ya que fallaría pasados los 360º. Para incrementar una rotación de esta forma, tenemos que usar la función Transform.rotate.

Usemos un ejemplo muy simple. Antes arrastremos nuestro cubo en la jerarquía fuera de la cápsula, para desemparentarlo. Y rehacemos por enésima vez nuestro script (que debería continua vinculado al cubo)


transform.eulerAngles = Vector3(60,0,0);


Podéis ver que nuestro cubo ha girado un 60 grados sobre el eje X, entendido éste como un alambre invisible que cruza de manera horizontal la escena (por decirlo de alguna manera)

Como colofón, añadir que Unity automáticamente convierte los angulos Euler que le pasamos al transform en los valores usados para la rotación almacenada en Transform.rotation.


localEulerAngles:

var localEulerAngles : Vector3


Aquí no deberíamos necesitar grandes explicaciones: localEulerAngles se refiere a la rotación en grados de un transform con relación a la que tiene el transform del cual depende en una relación hijo/padre.

Al igual que con la variable anterior, Unity automáticamente convierte los angulos Euler en los valores usados para la rotación almacenada en Transform.localRotation.


rotation:

var rotation : Quaternion


Es la variable que contiene la rotación del transform en el mundo global almacenada en quaterniones.

Como ya hemos dicho, Unity almacena internamente todas las rotaciones en quaterniones, lo cual no quiere decir que nosotros tengamos que trabajar directamente con ellos. Por norma general, o bien trabajaremos con grados Euler que luego se convertirán implícita o explicitamente en quaterniones, o bien a lo sumo usaremos alguna función que nos permita encapsular las operaciones con quaterniones.


localRotation:


var localRotation : Quaternion


Obviamente, esta variable indica la rotación en quaterniones de un transform relativa a la rotación de su padre


right, up y forward:

var right : Vector3
var up : Vector3
var forward : Vector3


Estas variables hacen referencia respectivamente al eje X(derecha/izquierda), Y (arriba/abajo) y Z(delante/detrás) de las coordenadas globales del transform. No las hemos de confundir con las variables del mismo nombre de la estructura Vector3. Así, Vector3.up es un atajo que equivale a Vector3(0,1,0), esto es, implica un movimiento de una unidad hacia arriba. En cambio, transform.up meramente hace referencia al eje arriba/abajo, pero no implica movimiento. Para mover un transform por esta vía tendríamos que hacer algo como esto:

En Unity eliminamos el script que tenemos vinculado a nuestro cubo. En Proyecto abrimos nuestro script y tecleamos:


var unObjeto : GameObject;

unObjeto.transform.position = transform.right*10;
unObjeto.transform.eulerAngles = transform.up*45;


Arrastramos nuestro script tras salvarlo a PortaScripts en la Jerarquía y con Portascripts seleccionado arrastramos el cubo a la variable expuesta. Play.

Efectivamente, el cubo se desplaza 10 unidades a la derecha y 45 grados sobre el eje Y.


Hasta una próxima lección.

POSTED BY UnityScripts
POSTED IN
DISCUSSION 1 Comment

One Response to : 11. CLASE TRANSFORM (II)

  1. Un ejemplo práctico de transform.right:

    Si quiero mover un cubo en el eje X local del cubo, no en el eje X global:

    transform.position += transform.right * 10;

    Si me fijo en las coordenadas locales del cubo, voy a ver que se mueve a "su" derecha en 10 unidades.

Leave a Reply

Con la tecnología de Blogger.