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.
Sfida
MedioFai volare il drone fino alla piattaforma di atterraggio quando viene premuto il tasto Spazio.
- Aggiungi i campi
bool flying;ebool landed;. Quando si verificaInput.GetKeyDown(KeyCode.Space), impostaflying = true;. - Mentre
flying && !landed, spostalo conVector3.MoveTowards(transform.position, pad, speed * Time.deltaTime). - Quando
transform.position == pad, impostalandede registraLanded.
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
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity