Menu
CoddyTech

Mira hacia donde te mueves

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 42 de 63.

transform.LookAt necesita un punto al que mirar. A menudo, lo que tienes es una dirección: una velocidad, el viento, la trayectoria de algo que se movió. Quaternion.LookRotation(direction) devuelve la rotación cuyo eje frontal (la flecha azul del eje z) apunta en esa dirección, manteniendo la parte superior del objeto orientada hacia la parte superior del mundo. Una flecha lanzada al aire apunta hacia arriba al principio y se inclina al caer, porque su velocidad hace lo mismo:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (rb.linearVelocity != Vector3.zero)
    {
        transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
    }
}

Solo cuenta la dirección, no la longitud: (1, 0, 2) y (3, 0, 6) dan la misma rotación. Un vector cero no tiene dirección, así que LookRotation(Vector3.zero) registra Look rotation viewing vector is zero y devuelve Quaternion.identity, que hace que el objeto mire hacia +z. Por eso la flecha comprueba primero: cuando se detiene, conserva la orientación que tenía. LookAt(target.position) da la misma rotación que LookRotation(target.position - transform.position).

La componente vertical de la dirección inclina el eje frontal hacia arriba o hacia abajo. Para algo que debe mantenerse erguido, como un caminante que sube una pendiente, establece primero en 0 la y de la dirección, para que el objeto gire solo alrededor de y. Un segundo argumento, LookRotation(direction, Vector3.up), indica qué dirección es hacia arriba; Vector3.up es lo que se usa si no se especifica.

challenge icon

Desafío

Intermedio

La abeja vuela de flor en flor. El script Mover ya preparado la hace volar en línea recta, subiendo o bajando por el camino, y la deja descansar 1 segundo en cada flor; deja Mover tal como está. Escribe FaceMotion para que la abeja mire hacia donde vuela:

  • Mira hacia donde se movió desde el último fotograma, visto desde arriba.
  • Se mantiene erguida: no inclina el morro hacia arriba ni hacia abajo mientras sube o baja.
  • Mientras descansa, mantiene la orientación que tenía, y no se registra nada.

El código va en LateUpdate(), así que Mover ya habrá movido la abeja durante este fotograma. Pulsa Reproducir y luego Comprobar.

Pruébalo tú mismo

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

    void Start()
    {
        lastPosition = transform.position;
    }

    void LateUpdate()
    {
        // Orienta la cara en la dirección en la que se movió la abeja desde el fotograma anterior.
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad