Menu
CoddyTech

Sguardo in avanti

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

Una telecamera centrata su un giocatore in movimento mostra tanto del percorso già fatto quanto di quello che sta per fare. Una visuale laterale può invece anticipare il movimento: posizionati qualche unità davanti al giocatore, dal lato verso cui si sta dirigendo.

La visuale laterale si inverte quando il giocatore cambia direzione, e un’anticipazione che si inverte di colpo fa sobbalzare l’intera visuale. Mantieni quindi l’anticipo in un campo e fallo scorrere verso il nuovo valore con Mathf.MoveTowards, un po’ a ogni fotogramma. Questa telecamera per barche anticipa di 2 unità e scorre a 3 unità al secondo:

float lead;
float heading = 1f;   // 1 naviga verso destra, -1 naviga verso sinistra

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

La direzione è quella verso cui la barca si è mossa l’ultima volta: confronta la sua x con la x del fotogramma precedente e lascia invariata la direzione nel fotogramma in cui non si è mossa, così una barca ferma mantiene il suo anticipo.

challenge icon

Sfida

Medio

Fai in modo che la telecamera laterale mostri di più la direzione in cui sta andando il corridore.

  1. In LateUpdate(), confronta la x del corridore con lastX: se si muove verso destra, imposta direction su 1; se si muove verso sinistra, su -1; se resta fermo, lascia invariato il valore.
  2. Fai scorrere shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Imposta la x della telecamera su player.position.x + shift, mantenendo invariati y e z.

Premi «Gioca» e corri in entrambe le direzioni. Poi premi «Verifica».

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 del suo ultimo movimento, spostandoti a shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity