No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Unity: Scripting

Curso de Introducción a Unity: Scripting

Ruth Margarita García López

Ruth Margarita García López

Manipulando al componente Transform: rotación y escala

9/24
Recursos

¿Cómo manipular componentes transform en Unity?

La manipulación de componentes transform en Unity nos permite establecer y modificar la posición, rotación y escala de nuestros objetos en el juego. A través de estas propiedades podemos crear dinámicas interesantes y animaciones envolventes. Esta guía te llevará a explorar algunos conceptos clave sobre cómo trabajar con estos componentes desde el código.

¿Cómo funciona la posición del objeto?

En Unity, la posición de un objeto se define mediante un constructor de tipo Vector3, que representa las coordenadas X, Y, Z en el espacio 3D.

transform.position = new Vector3(1, 2, 3);
  • X: derecha/izquierda
  • Y: arriba/abajo
  • Z: adelante/atrás

Al ubicar este código en el método Start, el objeto se desplazará a una posición específica al inicio del juego. Aun así, el objeto puede ser movido manualmente después, porque Start se ejecuta una sola vez. Si en lugar de Start usamos Update, la posición se forzará continuamente cada fotograma, impidiendo el movimiento manual.

¿Cómo ajustar la rotación de un objeto?

La rotación de los objetos en Unity utiliza cuaterniones (quaternions), que proporcionan una forma estable y eficiente de representar rotaciones sin el problema del "bloqueo de Gimbal".

transform.rotation = Quaternion.Euler(10, 45, 20);
  • X (10 grados): rotación como afirmación ("sí").
  • Y (45 grados): rotación como negación ("no").
  • Z (20 grados): rotación como si un perro inclina la cabeza.

¿Cómo mover objetos sobre ejes específicos?

Podemos trasladar objetos continuamente usando vectores pequeños que, al sumarse, crean movimientos fluidos al dibujarse varios fotogramas por segundo.

transform.position += new Vector3(0, 0, 0.05f);

Al sumar un Vector3 pequeño al eje Z global, el objeto se moverá suavemente hacia adelante. No olvides la f al final de los números decimales para asegurarte de que Unity los trate como float.

Para movimientos relativos, es preferible usar el método translate, que opera en espacio local:

transform.Translate(0, 0, 0.05f);

Esto asegura que el objeto se mueva conforme a su orientación, no respecto a un sistema de referencia global.

¿Cómo se ajusta la escala de un objeto?

La escala de un objeto se modifica a través de la propiedad localScale, debido a que la escala global puede ser compleja de manejar.

transform.localScale += new Vector3(0, 0, 0.05f);

La variable localScale permite aumentar de manera sostenida el tamaño del objeto en el eje Z en un 5% cada fotograma. Este ajuste será uniforme, sin importar la rotación del objeto.

¿Cómo funcionan las posiciones locales y globales?

Las diferencias entre position y localPosition surgen principalmente en escenarios jerárquicos. Un objeto hijo seguirá a su padre respecto a su localPosition, pero position define su ubicación en el mundo global.

  • localPosition: Relativo al espacio del componente padre.
  • position: Independiente y a nivel global.

Por ejemplo, si un cubo está dentro de un objeto vacío reducido, su desplazamiento local parecerá menos debido a la propia limitación del espacio del padre.

Con estas herramientas y entendimiento, estarás mejor preparado para desarrollar mecánicas más interesantes al manipular objetos en Unity. Sigue explorando y compartiendo tus experiencias para mejorar continuamente tus habilidades en el desarrollo de videojuegos. ¡Adelante!

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Esto es lo que sucede de solo dejar transform.Rotate(), el objeto gira sobre si mismo.

## Clase #09: **Manipulando al componente Transform: rotación y escala** Cuando la transformación de la posición ocurre dentro de **void Start()** ocurrirá sólo al inicio, luego de darle play al juego podremos mover el GameObject en la escena, caso contrario a cuando lo colocamos en **void Update()**, ya que en este caso estará constantemente indicando la posición con la renderización de cada frame y será imposible mover al objeto. ```js using System.Collections; using System.Collections.Generic; using UnityEngine; void Start() { transform.position = new Vector3(1,2,3); } void Update() { /* transform.rotation = new Vector3(1,2,3); dará error ya que se maneja con Quaterniones */ // Para mover respecto a coordenadas globales: transform.rotation = Quaternion.Euler(10, 45, 20); // Degradianes transform.position += new Vector3(0, 0, 0.05f); // Se moverá en el eje Z global // Para mover respecto a coordenadas locales: transform.Translate(0, 0, 0.05f); // Pequeño vector para avance incremental en función de 200 frames/segundo transform.Rotate(0, 5, 0); // Para modificar dimensiones (sólo posible respecto a coordenadas locales) transform.localScale += new Vector3(0, 0, 0.05f); } ```

El cubo se mueve al inicio de la posicion indicada, ya que se llama la funcion desde el start por lo que solo se ejecuta una vez y desde que se llama se puede modificar libremente

El cubo se puede mover después de poner Vector3(1, 2, 3) por que esta orden solo se ejecuta en start 1 sola vez después de ahí no necesariamente debe de tener la misma posición, pero si en vez de poner la orden en start se pondría en update por ejemplo serias incapaz de mover el objeto por que su posición se estaría actualizando a Vector3(1, 2, 3) por cada frame constantemente.

También podríamos moverlo sumándole el vector de dirección local

transform.position += transform.forward * speed

Creo que es por que ese “seteo” solo se realiza al comienzo del ciclo de vida del gameObject.