Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Questa 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);
    }
}
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