1 - Unity 3D e 2D, C#
1 - Unity 3D e 2D, C#
2D e 3D
Scripting in C#
1. Scripting
2. Fondamenti di programmazione a Oggetti
3. Eventi base del ciclo di vita di Unity
4. Come leggere un input
5. Best-Practice e Naming Convention
File e prerequisiti per la lezione
Scaricate questo zip e estraetelo, contiene uno UnityPackage. Aggiustiamo i materiali in maniera semplice.
Gli UnityPackage contengono asset per i progetti Unity, potete importarlo
sul vostro progetto corrente aperto facendo doppio click o trascinandolo sul Nella finestra project, individuate la cartella materials e
project. selezionate tutti i materiali danneggiati (in rosa).
Selezione multipla con Maiusc + click del primo e
Una finestra di importazione vi permetterà di scegliere quali file includere. dell’ultimo elemento oppure Ctrl + A per selezionarli tutti.
Andate su:
Aprite la scena Prototype 1, vedrete che i materiali sono danneggiati. Edit>Rendering>Materials>Convert Selected Built-in
La versione di questo package utilizza la vecchia Built-In Render Pipeline. Materials to URP
C#: Hello world!
Il linguaggio di programmazione usato da unity è C#
Permette di creare la logica di gioco, controllare il
comportamento dei GameObject e gestire eventi.
Gli script creati sono components e possono essere
assegnati ai GameObject, gestendo input, fisica,
animazioni e molto altro.
Gli script C# in Unity derivano dalla classe MonoBehaviour, che fornisce metodi chiave
come Start() e Update() per gestire eventi nel ciclo di vita del gioco.
● Modificatore di accesso: public o private, determina se è accessibile dall’esterno della classe in cui
risiede
● Tipo dell’informazione che contiene può essere un tipo base (int, float, char o bool) oppure una
classe (Vector3, GameObject, Transform etc)
● Nome: arbitrario, ma scelto in maniera da esplicitare il contenuto (counter, speed, movement)
● Valore: può essere un valore numerico(es. 42), una stringa (es. “hello world”) o un riferimento a
un’istanza di classe (es. un transform, un rigidbody, un gameobject o altro).
L’istanza è un oggetto di una certa classe, in cui le variabili sono state inizializzate.
Per esempio se definiamo una classe Room, potremmo avere l’istanza kitchen, studio o office.
Ogni Room sarà caratterizzata da valori delle variabili diversi (areaSize, doorsNumber,
windowNumber) e da metodi comuni (GoInside, Explore, GoOut ecc)
public Room currentRoom = office; //Assegna alla variabile chiamata currentRoom di tipo Room
il riferimento all’istanza office.
Metodi, firme e visibilità
Un metodo è una porzione di codice che si occupa di eseguire una certa azione.
La firma deve essere univoca, il nome invece può essere usato più volte, in questo caso si dice che il metodo
è overload, ad esempio Move(Vector2 position) e Move(Vector3 position) possono coesistere perchè la loro
firma è differente, sarà il tipo di parametro ricevuto dal metodo a determinere quale chiamare.
LateUpdate, è chiamato una volta per frame, dopo che l'Update termina la sua
esecuzione, anche questo è influenzato dal frame rate.
● public: La classe o il membro è accessibile da ● static: I valori statici appartengono alla classe
qualsiasi altra classe o codice. anziché a una specifica istanza.
● private: La classe o il membro è accessibile solo
● virtual: Indica un metodo che può essere sovrascritto
all'interno della propria classe.
● internal: valore di default, renderà la classe o il dal modificatore override. I metodi virtual possono
membro accessibile all'interno dello stesso avere un'implementazione predefinita.
assembly. ● override: Sovrascrive un metodo ereditato che è
dichiarato come virtual o abstract nella classe base
……………………………………….
……………………………………….
● protected: La classe o il membro è accessibile
all'interno della propria classe e nelle classi ● abstract: Classe che non può essere istanziata
derivate.
direttamente o metodo che deve essere
● protected internal: La classe o il membro è
accessibile sia all'interno dello stesso assembly implementato nelle classi derivate.
che nelle classi derivate, anche se si trovano in Le classi astratte possono contenere solo metodi
assembly diversi. astratti.
● sealed: Classi che non possono essere estese
Sintassi: Dotted notation e punto e virgola
In C# se volete leggere il parametro di un oggetto o usare un suo metodo, dovete
usare la dotted notation, ovvero:
● nomeOggetto.nomeVariabile;
● nomeOggetto.NomeMetodo();
● NomeClasse.NomeMetodoStatico();
Ogni linea di codice termina con il punto e virgola, non con l’andata a capo.
Le variabili andrebbero dichiarate e inizializzate all’inizio della classe:
modificatoreDiAccesso tipo nomeVariabile = valore o istanza;
public int counter = 0;
public float speed = 3.5f;
Istruzioni e operatori booleani
● if(condition){task1}else{task2} //Esegue task1 se la condizione è vera, task2 se è falsa *if else
● var a = condition ? value1 : value2; //Assegna value1 se la condizione è vera, assegna value2 se è falsa *Operatore ternario
● while(condition){task} //Esegue task sino a quando condition è vera, potrebbe non eseguirlo *Ciclo while
● do{task}while(condition); //Esegue task almeno una volta e lo ripete finchè condition è true *Ciclo do while
● foreach(item in items){task} //Per ogni elemento item in una lista ripete task *Ciclo foreach
● for(int i=0; i<n; i++){task} //Svolge task n volte a ogni esecuzione incrementa i di 1 unita *Ciclo for
● for(;condition;var++){task} //Svolge task sinchè condition è vera a ogni esecuzione incrementa var *Ciclo for
● return; o return value; //Termina l'esecuzione di un metodo e restituisce un valore
condition è un booleano, ovvero vale True o False e può essere il risultato di un’operazione, oppure una variabile di tipo bool.
Le operazioni che restituiscono booleani si fannoc con operatori di confronto e operatori logici