Menu
CoddyTech

Muoversi verso un punto

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 35 di 85.

Vector3.MoveTowards(current, target, maxStep) restituisce un punto fino a maxStep più vicino a target. Se il bersaglio è più vicino di così, restituisce il bersaglio stesso, quindi non lo oltrepassa mai. Usando speed * Time.deltaTime come passo, un oggetto si sposta a velocità costante e si ferma esattamente sul bersaglio. Questa funivia scivola fino alla stazione a 2 unità al secondo:

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

Una volta arrivata, ogni chiamata successiva restituisce di nuovo station, quindi la funivia resta ferma e transform.position == station è vero. Per un singolo numero, Mathf.MoveTowards funziona allo stesso modo.

Vector3.Lerp(a, b, t) è il punto che si trova a una frazione t del percorso da a a b: con t = 0.5 è a metà strada. Scritto come Lerp(transform.position, station, 2f * Time.deltaTime) in Update(), percorre una parte della distanza rimanente a ogni fotogramma: all'inizio è veloce, poi rallenta sempre di più avvicinandosi alla fine, procedendo lentamente invece di arrivare a una velocità prestabilita. Usa MoveTowards quando un oggetto deve spostarsi a velocità prestabilita e fermarsi esattamente; usa questo schema con Lerp per un rallentamento graduale.

challenge icon

Sfida

Medio

Fai volare il drone fino alla piattaforma di atterraggio quando viene premuto il tasto Spazio.

  1. Aggiungi i campi bool flying; e bool landed;. Quando si verifica Input.GetKeyDown(KeyCode.Space), imposta flying = true;.
  2. Mentre flying && !landed, spostalo con Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime).
  3. Quando transform.position == pad, imposta landed e registra Landed.

Premi «Gioca», poi Spazio: il drone atterra sulla piattaforma. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Dopo Space: vola verso pad alla velocità speed e registra Landed una sola volta all'arrivo
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity