Tra qualche lezione vedremo le classi più usate in Unity, i vector2 (punti in una spazio 2D) i vector3 (punti in uno spazio 3D) e molti altri.
Per usarle dovremmo dichiararle ed inizializzarle, come abbiamo fatto per le variabili viste fin’ora.
Prima però dobbiamo fare una precisazione in termini;
Dichiarare e Inizializzare sono cose differenti.
Dichiarare una variabile significa specificare “la sua esistenza”. Ovvero, dichiariamo che quella variabile esisterà e la utilizzeremo nel nostro script.
int Pippo;
Inizializzare significa invece assegnargli un valore e può essere fatto solo dopo la sua dichiarazione (oppure contemporaneamente).
pippo=2;
Come detto potremmo fare entrambe le cose contemporaneamente, su un’unica riga:
int pippo=2;
Ma attenzione, perché quando faremo la dichiarazione di una variabile, quella variabile sarà disponibile solo all’interno dello scopo (o contesto) in cui l’abbiamo dichiarata.
Che cos’è lo Scopo?
Semplicemente, lo spazio racchiuso tra le parentesi graffe. Si tratta del contesto in di un certo pezzo di codice delimitato dalle parentesi graffe. Dunque una classe ha il suo scopo, un metodo ha il suo scopo.
Facciamo un esempio dove dichiariamo una variabile nel contesto (scopo) della classe.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NuovoScript : MonoBehaviour { //Apertura scopo della classe int pippo; //Dichiariamo una variabile di tipo int void Start () {//Apetura scopo del metodo Start pippo = 2; //Inizializiamo la variabile }//Chiusura scopo del metodo Start void Update () { //Apetura scopo del metodo Update pippo= 5;//Cambiamo il valore della variabile }//Chiusura scopo del metodo Update } //Chiusura scopo della classe
In questo esempio abbiamo dichiarato la variabile pippo fuori da ogni metodo, direttamente nello scopo della classe NuovoScript.
In questo modo la variabile sarà accessibile per tutta la calsse e in ogni metodo di essa.
Infatti nell’esempio l’abbiamo richiamata nel metodo Start e poi cambiata dentro il metodo Update senza ricevere nessun errore. La variabile pippo sarà disponibile in ogni punto della classe, che sia in un metodo, in un’iterazione (per esempio un if) o altro.
Se invece avessimo dichiarato la variabile dentro il metodo Start, non avremmo potuto usarla dentro il metodo Update.
Tipo:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NuovoScript : MonoBehaviour { //Apertura scopo della classe void Start () {//Apetura scopo del metodo Start int pippo = 2; //Dichiariamo e Inizializiamo la variabile }//Chiusura scopo del metodo Start void Update () { //Apetura scopo del metodo Update pippo= 5;//Cambiamo il valore della variabile }//Chiusura scopo del metodo Update } //Chiusura scopo della classe
Ci sarebbe ritornato un errore che ci informa appunto che la variabile pippo non esiste in quel contesto.
Dunque ricordiamoci di dichiarare le nostre variabili appena aperta la classe, così da poterla usare per l’intero script senza problemi.
La porola chiave new
Non l’abbiamo incontrata, ma lo faremo presto.
Quando dovremmo creare un nuovo oggetto di una determinata classe, dovremmo usare la parola chiave new. Questo appunto, solo se la variabile è “nuova”, cioè non è stata mai inizializzata nell’ambito della classe.
Prendiamo per esempio la classe proprietaria di Unity Vector3, ovvero una classe che identifica un punto nello spazio ed ha bisogno delle tre coordinate X,Y,Z.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NuovoScript : MonoBehaviour { Vector3 posizione; //Dichiariamo una variabile di tipo Vector3 void Start () { posizione = new Vector3(10, 10, 10); //Inizializiamo la variabile } void Update () { } }
Vedremo in seguito come gestire i Vector3, sappiate sin da ora che sono di fondamentale importanza in Unity (e qualsiasi altro engine 3D) perché identificano la posizione di qualunque oggetto nella scena, oltre che alla scala di un oggetto. Dunque sarà necessario anche per muovere i gameObjects.
Potremmo vedere il valore della posizione di ciascun’oggetto anche all’interno del componente Transform.
Position è appunto un Vector3 composto dalle tre componenti X,Y,Z.
Conclusioni finali sulla dichiarazione e l’inizializzazione
Non abbiamo finito di parlare di quest’argomento. Dovremmo vedere nel dettaglio i modificatori d’accesso come pubblic e private, così come il modificatore static.
Li vedremo con un approfondimento sulle variabili.