Movimiento y Rotación de Personajes en Unity
Clase 30 de 33 • Curso de VR con Unity
Contenido del curso
Creando nuestro mundo 3D en Unity
- 6

Crear terreno 3D en Unity con Standard Assets
08:42 min - 7

Creación de Escenarios en Unity: Terreno y Erosión Realista
10:19 min - 8

Texturización de terrenos en Unity: creación de entornos realistas
10:56 min - 9

Cómo pintar árboles en Unity para VR
06:54 min - 10

Añadir césped y efectos de viento en Unity 3D
06:57 min - 11

Configurar skybox de seis lados en Unity
06:53 min - 12

Integración de Armas y Escudo en Realidad Virtual con HTC Vive
12:09 min
El realismo del VR: Programando a nuestro personaje
- 13

Programación de Lógica de Armas en Realidad Virtual
10:22 min - 14

Mapeado de controles HTC Vive en Unity
10:08 min - 15

Controles VR: grip y gatillo en Unity
10:02 min - 16

Configuración de Bolas de Fuego en Unity para Realidad Virtual
09:21 min - 17

Disparo de bola de fuego en VR
10:11 min - 18

Corrección de bugs: recarga y audio en armas Unity
04:44 min - 19

Colliders y Rigidbody en el diseño de personajes y armas en Unity
08:25 min - 20

Sistema de vida reutilizable en Unity
05:23 min
El realismo del VR: Creación de HUD (Heads Up Display) y generando enemigos
- 21

HUD en VR: canvas anclado a cámara
08:50 min - 22

Configuración de Barras de Vida y Maná en Unity
05:54 min - 23

Programación de Daño en Videojuegos: Lógica de Armas y Magia
11:07 min - 24

Slider Unity: vida y maná en un script
08:00 min - 25

Cómo configurar un dragón enemigo en Unity
11:40 min - 26

Colliders y barras de vida para dragones
08:31 min - 27

Animaciones de Muerte y Desaparición de Enemigos en Unity
10:01 min - 28

Cómo crear oleadas de dragones con portal
11:24 min
El realismo del VR: Programando la IA de nuestro juego
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.