Vector3 è una struct
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 22 di 67.
Vector3 è una struct, un tipo che il percorso di C# non ha trattato. Una struct è un valore, come un int: assegnarla ne copia l'intero contenuto. Dopo Vector3 b = a; b.x = 9;, a.x rimane invariato, perché b è una copia separata. (Una classe funziona al contrario: due variabili possono fare riferimento allo stesso oggetto condiviso.)
transform.position è una proprietà e, quando la leggi, ti restituisce una copia della posizione. Quindi transform.position.x = 0; modificherebbe una copia che viene subito scartata, e C# rifiuta di compilare il codice: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. La soluzione è copiare la posizione, modificare la copia e riassegnarla. Questo runner torna alla corsia centrale quando premi Space:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // copia
p.x = 0; // modifica la copia
transform.position = p; // assegnala nuovamente
}Se ometti l'ultima riga, il codice viene compilato, ma non si muove nulla: è cambiata solo la copia. transform.localScale e le altre proprietà Vector3 funzionano allo stesso modo.
Sfida
FacileLa slitta cade a fall unità al secondo e le frecce la fanno scivolare lungo x. Due righe dovrebbero mantenerla sul pavimento (y mai inferiore a 0.5) e tra le pareti (x da -4 a 4), ma lo script non viene compilato.
Premi Play per vedere gli errori. Correggi le due righe lavorando su una copia della posizione, mantenendo ciò che fanno, poi premi Check.
Provalo tu
using UnityEngine;
public class Sled : MonoBehaviour
{
public float speed = 4f;
public float fall = 3f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
transform.position += new Vector3(h * speed, -fall, 0) * Time.deltaTime;
// Mantieni la slitta sul pavimento e tra le pareti.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di scripting in Unity
1Il tuo primo script
Ciao, UnityPosiziona il cuboMuovi a ogni frameRuota ogni secondoGuida con i tastiRiepilogo: guida il cubo4Vettori
Sommare vettoriDirezioniSpazio locale e spazio globaleVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni7Progetto: Acchiappa la stella
L'acchiappatoreUna stella cadente10Il ciclo di vita degli script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL’ordine del ciclo di vitaRipasso: logger del ciclo di vita2L'Inspector
Campi dell'InspectorSerializeFieldNumeri decimali e MathfAttributi dell'InspectorRiepilogo: Ascensore5Trasformazioni e gerarchia
Genitori e figliScalaGuarda gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita6Oggetti di gioco e componenti
Riferimenti nell’InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRipasso: interruttore della luce