Este tutorial tratará de explicarte como usar el componente Transform en Unity.
Que es el Transform?
El componente Transform en Unity está en todos los GameObjects. Sirve para informar a Unity acerca de donde dibujar los modelos en la escena, o donde posicionar un sonido, o donde estaría localizada una caja de colisión, en general, cualquier elemento que necesite estar presente en la escena.

Componente Transform con las propiedades : Posición, Rotación y Escala
Las posiciones de los vértices de un modelo están almacenadas en relación a un origen (el punto donde x=0, y=0 y z=0) local. Cuando agregamos el modelo a la escena las posiciones de sus vértices deben ser calculadas con respecto al origen de la escena para poder ser dibujado. El origen local puede ser distinto al origen de la escena y estoy requiere que se recalculen las posiciones de los vértices.
El origen y los ejes x, y, y z se llaman el Sistema de Coordenadas cartesiano en tres dimensiones. Cuando un punto en un sistema de coordenadas local es colocado en el sistema de coordenadas de la escena, también llamado el sistema de coordenadas del mundo, Unity debe hacer la transformación de la posición del objeto de su sistema de coordenadas local a la posición del objeto en el sistema de coordenadas global (el de la escena).

Objetos con sus sistemas de coordenadas locales y el sistema de coordenadas del mundo (global) en el centro
Posición, Rotación y Escala
La posición del Transform define el origen del sistema de coordenadas local del objeto. Los vértices del modelo serán dibujados con respecto a ese punto.

Posición
La rotación nos dice como esta orientado el objeto. Hay muchas formas de expresar esto matemáticamente, pero la usualmente mas fácil de entender es usando ángulos de giro respecto a los ejes x, y, y z, también llamados ángulos de Euler. En Unity un valor positivo es un giro en el sentido de las manecillas del reloj. Un valor negativo es un giro en el sentido contrario a las manecillas del reloj. Los giros en cada ángulo están expresados en grados sexagesimales (0 a 360) en el inspector. Internamente Unity usa Quaterniones los cuales representan la rotación con 4 valores. No es necesario ser un experto en Quaterniones ya que Unity nos da herramientas para trabajar con ángulos de Euler y para luego convertirlos a Quaterniones.

Rotación
La escala nos permite cambiar el tamaño del objeto en cada eje de coordenadas o dimensión. Una escala de x=1, y=1 y z=1 muestra el objeto en su tamaño original como fue importado. Un valor mayor a 1 agranda el objeto, un valor menor a 1 lo empequeñece. Un valor negativo refleja el objeto en el respectivo eje, como un espejo.

Escala
Jerarquías
Otra de las ventajas de los transforms es que nos permiten crear jerarquías de objetos, es decir, un objeto puede ser padre de otro objeto, y equivalente a decir que el otro objeto es hijo de el. La relación padre-hijo de los Transforms crea un efecto cascada de las transformaciones donde el Transform del padre afecta a todos sus hijos. Las jerarquías afectan todas las propiedades del Transform : posición, rotación y escala. Si se mueve el padre se mueven todos los hijos. Si se escala el padre, se escalan todos los hijos de igual forma. En Unity las jerarquías se pueden observar en el Hierarchy View.

Dos objetos con relacion de jerarquía - Padre e Hijo
Para hacer a un GameObject hijo de otro solo tienes que en el Hierarchy View arrastrar el objeto y soltarlo sobre el GameObject que será el padre. Si quieres que no sea mas el padre, lo arrastras y lo sueltas esta vez sobre ningún GameObject.
Local vs. Global
Cuando hablamos de un sistema de coordenadas local, nos referimos a que los valores de posición, rotación y escala son relativos a el sistema de coordenadas del objeto. En el sistema de coordenadas global estos valores son relativos a ese sistema. Se podría decir que el sistema de coordenadas global es el padre de todos los Transforms sin padre.
Por ejemplo, las posiciones de los vértices de un modelo cuyo Transform está en la posición (10, 0, 0) con una rotación de (0, 0, 0), es decir, alineado con los ejes, siguen siendo las mismas en el sistema de coordenadas local. Pero en el sistema de coordenadas global las posiciones de los vértices están desplazadas 10 unidades en el eje x. Si el modelo se mueve a la posición (20, 0, 0), la posición final de sus vértices sera la posición en el en el sistema local mas 20 unidades en el eje x. Esto afecta de manera similar la rotacion y la escala.
Que podemos hacer con el Transform?
El componente Transform es una parte vital de la interacción ya que nos permite cambiar la posición, rotación y tamaño de los objetos en cualquier momento, habilitando la posibilidad de crear movimiento y hacer cambios en la escena. Hay dos formas de modificar los valores del Transform en Unity : en el editor y usando scripts.
Para cambiar la posición, rotación y tamaño en el editor simplemente seleccionamos el objeto y directamente modificamos los valores en el inspector del componente Transfom.
Cambiar la posición usando un script (C#):
using UnityEngine;
public class ModificarTransform : MonoBehaviour {
private Transform _elTransform;
public float velocidad = 3f;
public float radio = 1f;
public float posicionY;
void Start () {
_elTransform = GetComponent<Transform>();
}
void Update () {
Vector3 pos = new Vector3(
Mathf.Cos(Time.timeSinceLevelLoad * velocidad) * radio, // x
posicionY, // y
Mathf.Sin(Time.timeSinceLevelLoad * velocidad) * radio); // z
_elTransform.localPosition = pos;
}
}
Crea este script en el editor (Menu Superior -> Assets -> Create -> C# Script) y agregáselo a un GameObject en la escena. Asegúrate que el nombre del archivo con el script sea igual al nombre de la clase : ModificarTransform.cs.
El objeto se moverá en forma circular sobre el plano xz. Algo útil es que posible cambiar la posición local y la posición global. Si en este mismo ejemplo haces el objeto con el Transform hijo de otro GameObject y rotas a este (el padre) en el eje x verás como la rotación ya ocurre en el plano xz en el sistema de coordenadas local. Si cambias
_elTransform.localPosition = pos;
por
_elTransform.position = pos;
la posición siempre cambiara en el plano xz sin importar la posición, rotación y escala del padre.
Cambiar la rotación usando un script (C#):
Usando el ejemplo anterior vamos a hacer que el objeto gire a medida que se mueve:
using UnityEngine;
public class ModificarTransform : MonoBehaviour {
private Transform _elTransform;
public float velocidad = 3f;
public float radio = 3f;
public float posicionY;
public void Start () {
_elTransform = GetComponent<Transform>();
}
public void Update()
{
float anguloEnRadianes = Time.timeSinceLevelLoad*velocidad;
float anguloEnGrados = anguloEnRadianes * Mathf.Rad2Deg;
Vector3 pos = new Vector3(
Mathf.Cos(anguloEnRadianes) * radio, // x
posicionY, // y
Mathf.Sin(anguloEnRadianes) * radio); // z
_elTransform.localPosition = pos;
_elTransform.localRotation = Quaternion.Euler(0, -anguloEnGrados, 0);
}
}
En este caso estamos creando un nuevo quaternion de rotación utilizando los ángulos de Euler y el método utilitario Quaternion.Euler. El angulo lo multiplicamos por -1 ya que las funciones Sin y Cos giran en el sentido contrario a las manecillas del reloj para valores positivos, contrario al método Quaternion.Euler.
Cambiar la escala usando un script (C#):
Finalmente y continuando con el código anterior vamos a cambiar la escala de nuestro objeto también utilizando el seno y coseno:
using UnityEngine;
public class ModificarTransform : MonoBehaviour {
private Transform _elTransform;
public float velocidad = 3f;
public float radio = 3f;
public float posicionY;
public float escalaMinima = 0.5f;
public float escalaMaxima = 2f;
public void Start () {
_elTransform = GetComponent<Transform>();
}
public void Update()
{
float anguloEnRadianes = Time.timeSinceLevelLoad*velocidad;
float anguloEnGrados = anguloEnRadianes * Mathf.Rad2Deg;
float escalaUpdate = Mathf.Abs(Mathf.Cos(anguloEnRadianes)) * (escalaMaxima - escalaMinima) + escalaMinima;
Vector3 pos = new Vector3(
Mathf.Cos(anguloEnRadianes) * radio, // x
posicionY, // y
Mathf.Sin(anguloEnRadianes) * radio); // z
_elTransform.localPosition = pos;
_elTransform.localRotation = Quaternion.Euler(0, -anguloEnGrados, 0);
_elTransform.localScale = new Vector3(escalaUpdate, escalaUpdate, escalaUpdate);
}
}
Este código cambia la escala local del objeto a medida que pasa el tiempo, de forma uniforme (igual) en las tres dimensiones.
Todavía hay mas por aprender y te sugiero que veas la pagina del manual en linea de Unity acerca de este componente : http://unity3d.com/support/documentation/Manual/Transforms.html