Perchè usare Unity per propri progetti 3D e prime nozioni

Alessandro Oddo

La nostra azienda porta avanti da anni un progetto di CAD 3D specializzato per studi di propagazione elettromagnetica su grandi scenari.

Esempio di scenario

Esempio di scenario

l progetto inizialmente sviluppato in OpenGL, poi su VTK, si è evoluto al punto tale da dover scegliere una soluzione commerciale che permettesse uno sviluppo più rapido delle funzionalità richieste. I framework che si avvicinano più alle nostre esigenze sono principalmente Unreal Engine e Unity. Entrambe le soluzioni sono valide e affidabili ma hanno delle differenze sostanziali per cui si è deciso per Unity. Infatti l'Unreal Engine avendo una community più ristretta (per quanto ampia) non permette una veloce risoluzione delle problematiche che normalmente si riscontrano durante lo sviluppo di un programma, inoltre il linguaggio di programmazione è C++ (misto a Blueprints per le cose più semplici), un linguaggio più lontano dal Java usato nelle versioni precedenti del progetto. Unity è un framework nato nel 2005 con l'idea di allargare il bacino di utenza intorno alla programmazione 3D, è stato ben accolto dai programmatori e negli anni si è generata una community molto ampia che ha permesso la creazione di tool e tutorial su ogni funzionalità per un veloce apprendimento. Nasce già multipiattaforma e soprattutto permette di adattare velocemente il programma a dispositivi mobile. Il linguaggio di programmazione è il C#, di facile apprendimento per chi non ha mai programmato.

Iniziare a programmare in Unity risulta semplice, basta andare nel sito ufficiale ( https://unity.com/ ), registrarsi e scaricare l'hub per la gestione dei progetti. Unity è in continua evoluzione e per questo motivo alla nascita di un nuovo progetto viene chiesta la versione da voler utilizzare, una volta scelta il passaggio a quella successiva è sempre possibile ma può richiedere uno sforzo aggiuntivo per adattare il codice alle nuove funzionalità (consiglio di mantenere i progetti a lungo periodo sempre aggiornati).

Creazione di un progetto

Creazione di un progetto

La console alla creazione di un nuovo progetto chiede come prima cosa che tipologia di progetto abbiamo necessità di creare, ci focalizzeremo su un progetto 3D, quindi selezioniamo "3D" e diamo un nome al nostro progetto. Ci ritroveremo davanti la console principale di Unity, sulla sinistra un albero contentente tutti gli oggetti presenti nella scena corrente, sulla destra un pannello inspector che da le informazioni sull'oggetto della scena correntemente selezionato e in fine un pannello sottostante che espone il contenuto delle cartelle del progetto. Nella zona centrale viene renderizzata la scena corrente, notare come siano presenti più tab, i più importanti risultano "Scene" e "Game", il primo permette di visualizzare e modificare gli oggetti all'interno della scena, il "Game" invece mostra quanto viene renderizzato dalla camera principale.

Terminologia fondamentale per iniziare:

  • scene: tutto ciò che appartiene al contesto corrente, un progetto può avere più scene e vi è la possibilità di passare da una all'altra durante l'esecuzione, è possibile anche farne il merge ma è una feature meno usata.
  • GameObject: ogni oggetto presente all'interno della scena è un GameObject, questa classe si specializza con l'aggiunta di componenti specifiche.

Alla creazione del progetto nella scene creata sono presenti già una Main Camera (la camera principale sfruttata per visualizzare la scene una volta avviato il programma) e una Direct Light(gestisce l'illunminazione principale). L'aggiunta di un elemento nella scene può avvenire programmaticamente o più semplicemente con il click destro sulla sezione di sinistra del framework, un primo elemento che possiamo aggiungere è un cube, questo possiamo farlo selezionandolo come in figura. Con la stessa modalità è possibile inserire tutta una serie di primitive geometriche già preconfigurate.

Aggiunta di un cubo

Aggiunta di un cubo

Inspect di un cubo esempio 1

Inspect di un cubo 1.

Possiamo vedere per il cubo, nel pannello di destra, un esempio delle proprietà più comuni quali posizione/traslazione/scale e più specifiche quali Mesh Filter e Render (deputate alla sua visualizzazione) oltre che il Box Collider(deputato, come suggerisce il nome, a gestire le collisioni con gli altri elementi della scena). Posizioniamolo in coordinate 0,0,0 modificando la sua Position così da averlo visualizzato di fronte alla nostra camera.

Inspect di un cubo esempio 2

Inspect di un cubo 1.1

Per comandare i singoliGameObject si devono scrivere degli script e associarli ad essi. Per creare un primo script consiglio di creare una cartella Scripts all'interno della cartella Assets dove andranno ad essere salvati.

Creazione di una cartella

Creazione di una cartella

Una volta creata al suo interno con la stessa modalità creare un C# Script e dargli un nome, una volta creato doppio click su esso per aprirlo con il vostro editor (consiglio Visual Studio 2019 o Rider).

Creazione di uno script

Creazione di uno script

Si può vedere che lo script creato eredita dalla classe MonoBehaviour, questa permette di accedere a tutte le proprietà del GameObject a cui verrà associato. Sono presenti già 2 funzioni vuote:

  • Start viene chiamata solo al primo frame, ovvero alla creazione dell'oggetto.
  • Update è chiamata ad ogni frame e permette di cambiare in realtime lo stato dell'oggetto.

Modifichiamo lo script Update aggiungendo una semplice riga di codice così da capirne il funzionamento.

```c#
void Update()
{
GameObject.transform.rotation = Quaternion.Euler(5*Time.fixedTime, 5 * Time.fixedTime, 0);
}
```

Con questo comando accediamo alla componente rotation delGameObject e gli imponiamo di ruotare di 5 gradi ad ogni frame (fixedTime è il tempo trascorso dal run del progetto).

Infine associamo questo script al cubo della scena, per farlo possiamo semplicemente trascinare lo script sopra l'oggetto o cliccare sul cubo, premere Add Component e quindi selezionare il nostro script dalla lista di elementi presenti

Aggiunta di un componente

Aggiunta di un componente

Fatto questo possiamo premere il tastoPlay presente in alto al centro della schermata per vedere il cubo iniziare a ruotare.

Con quanto scritto penso di aver sintetizzato l'approccio di Unity alla creazione di un nuovo progetto. In futuro prevedo di fare un articolo sulla creazione di una camera adatta alla visualizzazione a 360 gradi di un ambiente 3D.

  Il progetto è scaricabile al seguente indirizzohttps://static.netfarm.it/blog/test_unity_blog.zip

Alessandro Oddo

Alessandro Oddo

- Area Manager Scientific Software -