Movimiento y Rotación de Personajes en Unity

Clase 30 de 33Curso de VR con Unity

Resumen

Domina el movimiento realista en Unity con una combinación impecable de traslación y rotación. Aquí verás cómo un dragón elige un destino aleatorio y avanza hacia él en Update, usando speed, Time.deltaTime, Vector3.MoveTowards, Vector3.RotateTowards, Debug.DrawRay y Quaternion.LookRotation. Todo claro, directo y aplicable.

¿Cómo se implementa la traslación con velocidad y delta time?

La base del movimiento es la relación física entre espacio, velocidad y tiempo. Con una variable de velocidad y el delta time por frame, calculas cuánto avanzar en cada iteración. Así evitas saltos bruscos y logras que el desplazamiento sea independiente de los frames.

  • Espacio por frame con fórmula simple: space = speed × Time.deltaTime.
  • Traslación directa hacia el destino con Vector3.MoveTowards.
  • Conversión correcta del destino: usa destination.position para obtener un Vector3.
void Update() { // Traslación float space = speed * Time.deltaTime; // espacio a recorrer este frame transform.position = Vector3.MoveTowards( transform.position, destination.position, // ojo: usar .position space ); }
  • MoveTowards necesita: posición actual, destino en Vector3 y distancia a mover en este frame.
  • Mantén el cálculo en Update para coherencia temporal.

¿Qué ecuación física se aplica para calcular espacio?

La idea es directa: espacio = velocidad × tiempo. En juegos, el tiempo es el delta time entre un frame y el siguiente. Si conoces la velocidad, obtienes el avance sin importar cuántos frames renderice tu equipo.

¿Qué hace Vector3.MoveTowards para la posición?

Este método mueve un punto hacia otro con una distancia máxima por llamada. Aquí, ese máximo es el space que calculas cada frame. Si el dragón ya mira al destino, avanzará suave y sin deslizamientos laterales.

¿Cómo se calcula y aplica la rotación hacia el objetivo?

Para evitar movimientos laterales “feos”, combina la traslación con una rotación progresiva hacia el objetivo. La clave es trabajar con direcciones: hacia dónde mira el dragón y hacia dónde debería mirar.

  • Dirección del objetivo con resta de posiciones: destination.position − transform.position.
  • Dirección actual de mirada con transform.forward.
  • Giro incremental con Vector3.RotateTowards y aplicación con Quaternion.LookRotation.
void Update() { // Traslación float space = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, destination.position, space); // Rotación Vector3 targetDirection = destination.position - transform.position; // hacia el objetivo Vector3 newDirection = Vector3.RotateTowards( transform.forward, // dirección actual targetDirection, // dirección deseada space, // maxRadiansDelta: aquí igualamos a space para girar a la misma "velocidad" 0f // maxMagnitudeDelta: 0 para giro constante ); Debug.DrawRay(transform.position, newDirection, Color.red); // ayuda visual transform.rotation = Quaternion.LookRotation(newDirection); // aplicar rotación }
  • transform.forward define el “frente” del modelo. Si el artista alineó bien el eje Z (vector azul), el giro será correcto.
  • Si el modelo estuviera mal orientado, corrige su rotación base para que el eje azul apunte al frente.

¿Cómo obtener target direction con restas de vectores?

En matemáticas, el vector que une dos puntos es la resta del punto final menos el inicial. Aquí: destino menos posición actual. Con eso obtienes la dirección normalizada que te sirve para orientar el dragón.

¿Cómo usar Vector3.RotateTowards y Quaternion.LookRotation?

  • RotateTowards gira un vector hacia otro en incrementos de ángulo controlados por maxRadiansDelta.
  • LookRotation construye una rotación mirando en newDirection, lista para aplicarla al transform.
  • Mantén la velocidad de giro constante con maxMagnitudeDelta = 0.

¿Cómo depurar con Debug.DrawRay en Unity?

Ver la dirección de giro ayuda mucho en 3D.

Debug.DrawRay(transform.position, newDirection, Color.red);
  • Dibuja un rayo desde la posición actual en la nueva dirección.
  • Usa un color vistoso para seguir el giro en la escena.

¿Qué son los quaternions y por qué Unity los usa?

Detrás de posición, rotación y escala, los motores usan matrices 4×4. La diagonal gestiona escalado, los términos fuera de la diagonal codifican rotaciones y la columna inferior gestiona traslaciones. Unity trabaja con quaternions para manejar estas combinaciones sin que tengas que multiplicar matrices a mano.

  • Unity genera y multiplica quaternions internamente al mover y rotar.
  • Evitas manejar decenas de líneas de código de bajo nivel.
  • El flujo es simple: calculas dirección, rotas con RotateTowards, visualizas con DrawRay y aplicas con LookRotation.
  • Resultado visible: los dragones miran al destino, luego avanzan, y se quedan en su punto de ruta hasta cambiar el destino más adelante.

¿Te gustaría que incorporemos el cambio dinámico de destino y el control de llegada al punto de ruta? Cuéntame qué prefieres ver a continuación y en qué parte te gustaría profundizar.

      Movimiento y Rotación de Personajes en Unity