Menu
CoddyTech

Guarda nella direzione in cui ti muovi

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 42 di 63.

transform.LookAt ha bisogno di un punto da guardare. Spesso, invece, quello che hai è una direzione: una velocità, il vento, il modo in cui qualcosa si è mosso. Quaternion.LookRotation(direction) restituisce la rotazione il cui avanti (la freccia blu sull'asse z) punta lungo quella direzione, mantenendo l'alto dell'oggetto rivolto verso l'alto del mondo. Una freccia scagliata in aria inizialmente punta verso l'alto e si inclina mentre cade, perché lo fa 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 scattare l'oggetto rivolgendolo verso +z. Ecco perché la freccia controlla prima: quando si ferma, mantiene la direzione che aveva. LookAt(target.position) produce la stessa rotazione di LookRotation(target.position - transform.position).

La componente verso l'alto o verso il basso della direzione inclina con sé il vettore in avanti. Per qualcosa che deve rimanere in posizione verticale, come un personaggio che cammina in salita, imposta prima a 0 la y della direzione, così l'oggetto ruota solo attorno all'asse y. Un secondo argomento, LookRotation(direction, Vector3.up), specifica quale direzione è verso l'alto; Vector3.up è il valore predefinito.

challenge icon

Sfida

Medio

L'ape vola da un fiore all'altro. Lo script Mover già pronto la fa volare in linea retta, salendo o scendendo lungo il tragitto, e la fa riposare per 1 secondo su ogni fiore; lascia Mover così com'è. Scrivi FaceMotion in modo che l'ape sia rivolta nella direzione in cui vola:

  • È rivolta nella direzione in cui si è mossa dall'ultimo fotogramma, vista dall'alto.
  • Resta dritta: il muso non punta né verso l'alto né verso il basso quando sale o scende.
  • Mentre riposa, mantiene la direzione che aveva e non viene registrato nulla.

Il codice va in LateUpdate(), quindi Mover ha già spostato l'ape in questo fotogramma. Premi Gioca, poi Controlla.

Provalo tu

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

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

    void LateUpdate()
    {
        // Guarda nella direzione in cui l'ape si è spostata rispetto al fotogramma precedente.
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay