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.
Sfida
MedioFai in modo che l’ape guardi nella direzione in cui vola, restando dritta.
- In
LateUpdate(), impostaVector3 direction = transform.position - lastPosition;edirection.y = 0;. - Solo quando
direction != Vector3.zero, impostatransform.rotation = Quaternion.LookRotation(direction);, così l’ape mantiene la direzione dello sguardo quando è ferma. - Infine, memorizza
transform.positioninlastPosition.
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
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity