Menu
CoddyTech

Guarda nella direzione in cui ti muovi

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 44 di 71.

transform.LookAt ha bisogno di un punto verso cui guardare. Spesso, però, hai a disposizione una direzione: una velocità, il vento, il verso in cui si è mosso qualcosa. Quaternion.LookRotation(direction) restituisce la rotazione il cui forward (la freccia blu z) punta lungo quella direzione, mantenendo l'up dell'oggetto orientato verso l'up del mondo. Una freccia scagliata in aria punta inizialmente verso l'alto e si inclina mentre cade, perché lo fa anche la sua velocità:

Rigidbody rb;

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

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

Conta solo la direzione, non la lunghezza: (1, 0, 2) e (3, 0, 6) producono la stessa rotazione. Un vettore nullo non ha direzione, quindi LookRotation(Vector3.zero) registra Look rotation viewing vector is zero e restituisce Quaternion.identity, che fa ruotare di scatto l'oggetto verso +z. Ecco perché la freccia controlla prima: quando si ferma, mantiene l'orientamento che aveva. LookAt(target.position) restituisce la stessa rotazione di LookRotation(target.position - transform.position).

La componente verso l'alto o il basso della direzione inclina il forward verso l'alto o il basso. Per un oggetto che deve restare dritto, come un camminatore che sale una pendenza, imposta prima a 0 la y della direzione, così l'oggetto ruota solo attorno a y. Un secondo argomento, LookRotation(direction, Vector3.up), indica quale direzione è verso l'alto; Vector3.up è il valore predefinito.

challenge icon

Sfida

Medio

Fai in modo che l’ape guardi nella direzione in cui vola, restando dritta.

  1. In LateUpdate(), imposta Vector3 direction = transform.position - lastPosition; e direction.y = 0;.
  2. Solo quando direction != Vector3.zero, imposta transform.rotation = Quaternion.LookRotation(direction);, così l’ape mantiene la direzione dello sguardo quando è ferma.
  3. Infine, memorizza transform.position in lastPosition.

Premi «Gioca»: l’ape si gira verso ogni fiore raggiunto volando. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

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

    void LateUpdate()
    {
        // Orientati nella direzione in cui si è mossa l'ape dall'ultimo frame.
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity