Spazio locale e spazio mondo
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 26 di 85.
Un oggetto ha le proprie direzioni, oltre a quelle del mondo. transform.forward indica dove punta il muso dell'oggetto (la freccia blu nella vista Scena di Unity), espresso come vettore del mondo lungo un'unità; transform.right e transform.up sono rispettivamente la sua destra e il suo alto. Ruota l'oggetto e ruoteranno anche queste direzioni. Questo aeroplanino di carta è ruotato di 90 gradi intorno all'asse y nella scena, quindi vola lungo l'asse x del mondo, nella direzione in cui punta:
public float speed = 4f;
void Update()
{
transform.position += transform.forward * speed * Time.deltaTime;
}transform.Translate(Vector3.forward * speed * Time.deltaTime) fa la stessa cosa, perché Translate interpreta il suo vettore nello spazio locale dell'oggetto: in quello spazio, Vector3.forward indica la direzione in avanti dell'oggetto. Passa Space.World come secondo argomento e userà invece gli assi del mondo, quindi transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World) si muove lungo l'asse z del mondo, qualunque sia la direzione in cui punta l'aeroplanino.
Anche transform.Rotate ruota intorno agli assi locali dell'oggetto. Visto dall'alto, un angolo positivo intorno all'asse y ruota un oggetto verticale verso destra, mentre un angolo negativo lo ruota verso sinistra; anche il suo transform.forward ruota insieme all'oggetto.
Sfida
FacileAssegna al carro armato i comandi tipici dei carri armati: ruota sul posto, avanza nella direzione in cui è rivolto.
- In
Update(), mentre tieni premuta la freccia destra,transform.Rotate(0, turn * Time.deltaTime, 0);, e usa-turnper la freccia sinistra. - Mentre tieni premuta la freccia su,
transform.Translate(Vector3.forward * speed * Time.deltaTime);.
Premi «Gioca», ruota e avanza: il carro armato va dove punta il muso. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class Tank : MonoBehaviour
{
public float speed = 3f;
public float turn = 90f;
void Update()
{
// Frecce destra/sinistra: ruota attorno all'asse y. Freccia su: avanza nella direzione in cui è rivolto il carro armato.
}
}
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