Sguardo in avanti
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 47 di 63.
Una telecamera puntata su un bersaglio in movimento mostra tanto il punto da cui proviene quanto quello verso cui sta andando. Invece, punta a un punto davanti a esso: la posizione del bersaglio più la sua velocità moltiplicata per un anticipo in secondi. Questa telecamera su un supporto accanto a una pista da corsa ruota per seguire l'auto e punta mezzo secondo più avanti:
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}A 20 unità al secondo, il punto verso cui punta si trova 10 unità davanti all'auto; a 4 unità al secondo, si trova a 2 unità; un'auto ferma viene puntata direttamente. La velocità è il movimento effettivo dell'auto, quindi il punto è nella posizione giusta durante una sbandata o quando l'auto fa retromarcia. transform.forward non sarebbe adatto: quando un'auto fa retromarcia, il suo vettore in avanti punta nella direzione opposta a quella in cui sta andando, mentre il vettore in avanti di una palla che rotola ruota insieme a essa.
Anche una telecamera che segue il bersaglio può anticiparlo: inquadra un punto davanti al bersaglio invece del bersaglio stesso. Quando quel punto può spostarsi dal lato opposto, come quando il giocatore si gira, modifica leggermente l'anticipo a ogni fotogramma, altrimenti l'intera visuale salta di colpo.
Sfida
MedioQuesta visuale laterale segue il corridore lungo x (le frecce lo fanno muovere a sinistra e a destra). Fai in modo che la telecamera mostri di più la direzione verso cui sta andando il corridore:
- La telecamera si trova
ahead(3) unità davanti al corridore lungo x, sul lato verso cui si è mosso per ultimo. Prima che il corridore si muova per la prima volta, è centrata su di lui. - Quando il corridore fa inversione, l'anticipo scivola sull'altro lato a
shiftSpeed(4) unità al secondo, invece di saltare. - Quando il corridore si ferma, la telecamera mantiene il suo anticipo.
- Le coordinate y e z della telecamera restano invariate.
Premi Play, corri in entrambe le direzioni, poi premi Check.
Provalo tu
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Anticipa il giocatore di ahead unità nella direzione in cui si è mosso l'ultima volta, scorrendo a shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere8La telecamera
Inseguimento fluidoTelecamera orbitaleSguardo in avantiVibrazione della telecameraRipasso: telecamera d'inseguimento