Di seguito una lista non ordinata di alcuni concetti con cui mi sono scontrato durante l’utilizzo di Unity 3D per lo sviluppo di videogiochi o simulazioni. Non vuole essere una lista esaustiva ne tanto meno una lista per esperti. Va considerata una lista per chi si approccia a Unity e riscontra dubbi, perplessità a problemi in alcuni aspetti dello sviluppo.

Gli argomenti trattati spaziano dall’editor alla fase di Game, dallo script al motore fisico passando dall’import dei modelli fino alla mappatura dei materiali.

Colliders e Centro di Massa

In GameObject con più di un collider triggerato, di cui uno di tipo Sphere, può succedere che il centro di massa del Rigidbody associato cambi valore continuamente. Questo genera spostamenti non voluti ed incontrollati del Rigidbody.
Il consiglio è di usare solo colliders di tipo Box quando possibile.

Motore fisico 2D e 3D

Il motore fisico 3D è chiamato Physics, il motore fisico 2D è invece chiamato Box2D.
I due sistemi sono atomici l’uno rispetto all’altro e non possono interagire tra di loro.
Possono invece coesistere.

Debug del motore fisico

E’ possibile eseguire il debug runtime del motore fisico, osservando quindi in Game i colliders, accedendo al debugger del motore tramite il menu Windows -> Analysis -> Physics Debug. Avere cura di abilitare poi la voce Force Overdraw per un debug più efficace.

StartCoroutine e StopCoroutine

Funzioni fondamentali, StartCoroutine() e StopCoroutine() richiedono come parametro il nome della funzione da eseguire, il modo più semplice ed efficace per eseguirle, per mantenere leggibilità e intellisense, è il seguente:

StartCoroutine(Method_Enumerator(param1, param2, param3…));
StopCoroutine(nameof(Method_Enumerator));

Conversione di parametri String in Float provenienti dall’editor

Per uno script MonoBehaviour il quale ha esposto un parametro String per l’editor che deve essere convertito in Float nello script, il metodo da utilizzare è quello di passare la Culture di tipo Invariant al metodo Convert in quanto preserva il valore con il punto (definendo la parte decimale) ma sopratutto consente uniformità tra le misure usate in Unity.

Nell’esempio sottostante editorValue viene specificato come “0.1” (notare il punto e non la virgola) nella finestra dell’editor, ma:

float convertedValue1 = Convert.ToSingle(editorValue) ritorna: 0.0f
float convertedValue2 = Convert.ToSingle(editorValue, System.Globalization.CultureInfo.InvariantCulture) ritorna: 0.1f

Import di modelli da software di modellazione 3D (Maya, 3ds Max, Blender…)

Durante la fase di export verificare che gli assi siano congrui con quelli di Unity:

  • X rosso verso destra
  • Y verde verso l’alto
  • Z blu verso l’orizzonte

Verificare inoltre le unità di misura. Spesso non coincidono in quanto in Unity 1 corrisponde ad un metro mentre, ad esempio, in Maya 1 corrisponde ad un centimetro. Una volta importato il modello in Unity, selezionarlo e provare a disabilitare la seconda casella che riguarda la conversione automatica delle unità di misura.

Il consiglio è di untilizzare come file di interscambio il formato .FBX che include sia la definizione dei materiali a livello di facce della mesh che le animazioni. Esporta inoltre luci e camera (che in realtà potrebbero essere di troppo).

Abilitare l’autocomplete (intellisense) per Visual Studio

Può capitare che l’editor Visual Studio non riconosca l’auto-completamento (o intellisense) degli oggetti principali.
La soluzione qui.

Update vs FixedUpdate

Update() e FixedUpdate() sono richiamate all’interno del flusso di esecuzione. E’ bene sapere che Update() deve essere utilizzato quando si interroga il sistema di Input (in quanto viene eseguito in modo atomico e sequenziale), mentre FixedUpdate() quando si eseguono operazioni che coinvolgono movimenti e interazioni con il motore fisico (velocità, collisioni, posizioni, etc).
Qui l’ordine di esecuzione ufficiale.

BONUS: Pacchetti consigliati

Accedendo al menu Windows -> Package Manager è possibile installare pacchetti aggiuntivi di Unity. Avere cura di cercare anche tra le Prerelease e le Preview. Di seguito alcuni pacchetti consigliati:

  • ProGrids – gestione degli snap sulla griglia dell’editor
  • ProBuilder – gestione della modellazione nell’editor
  • Cinemachine – gestione della camera in modo cinematografico

[…in aggiornamento]

LASCIA UNA RISPOSTA

Please enter your comment!
Please enter your name here