Menu
CoddyTech

Inseguimento fluido

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

Una telecamera che copia la posizione del giocatore più un offset in LateUpdate() trasforma ogni scossone del giocatore in uno scossone della visuale. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) restituisce una posizione che si avvicina a target come farebbe una molla smorzata: accelera, rallenta man mano che si avvicina al bersaglio e lo raggiunge senza superarlo. Questa telecamera segue il giocatore da 3 unità più in alto e 6 più indietro, con un leggero ritardo:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;

void LateUpdate()
{
    Vector3 target = player.position + offset;
    transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}

ref passa a SmoothDamp la variabile stessa invece di una copia, così il metodo può modificarla. SmoothDamp mantiene in velocity la velocità attuale della telecamera, su tutti e tre gli assi, e ha bisogno di ritrovarla al frame successivo: ecco perché è un campo. Se fosse dichiarata all'interno di LateUpdate(), ripartirebbe da zero a ogni frame e la telecamera avanzerebbe a passo lento, circa mezzo percento del percorso per frame. Per un singolo numero, come lo zoom di una telecamera, Mathf.SmoothDamp funziona allo stesso modo con una velocità float.

smoothTime imposta quanto la telecamera resta indietro: con 0.3, copre circa il 60% di un salto improvviso in 0.3 secondi e dopo 1 secondo è quasi arrivata. Un valore più piccolo la fa seguire più da vicino. SmoothDamp legge direttamente Time.deltaTime, quindi nella chiamata non devi moltiplicare nulla per questo valore.

challenge icon

Sfida

Medio

La telecamera guarda il giocatore dall'alto, da un'altezza fissa. Falla seguire in modo fluido con Vector3.SmoothDamp e smoothTime (0.25), avvicinandosi a questo punto:

  • x: la x del giocatore;
  • z: back (5) unità dietro il giocatore, verso -z;
  • y: sempre height (12), qualunque sia l'altezza del giocatore. La barra spaziatrice fa saltare il giocatore e la visuale non deve oscillare.

Premi Gioca, corri e salta, poi Verifica.

Provalo tu

using UnityEngine;

public class TopDownCamera : MonoBehaviour
{
    public Transform player;
    public float height = 12f;
    public float back = 5f;
    public float smoothTime = 0.25f;

    void LateUpdate()
    {
        // Avvicinati gradualmente alla posizione sopra player (x), a back unità dietro di esso (z), a un'altezza fissa.
    }
}
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