In questa lezione, vedremo come utilizzare il pannello Hierarchy, e i vantaggi di inserire oggetti all'interno di altri creando un rapporto parent-children.
Il pannello Hierarchy
Situato inizialmente alla sinistra della vista Scene, il pannello Hierarchy è fondamentale per la gestione della scena: in esso possiamo vedere tutti i nomi degli oggetti in scena organizzati in una lista, selezionarli, ed altre operazioni.
Inizialmente in una scena vuota, il pannello contiene solo la Main Camera che difatti è l'unico oggetto in scena. Andando su GameObject > Create Other > Cube
, vedremo comparire il nome del secondo oggetto appena creato.
Con un click si possono selezionare gli oggetti (vengono evidenziati in blu), anche utilizzando le classiche tecniche di selezione multipla dei file (trascinamento, Ctrl
o Cmd + Click
per aggiungere e rimuovere dalla selezione, o Shift + click
per selezionarne una serie, e così via).
Un doppio click sull'oggetto ha l'effetto di spostare il punto di vista sull'oggetto (nella Scene View), che è esattamente come premere F
mentre l'oggetto è selezionato.
Nota: quando si usa una shortcut in Unity, è importante dove si trova il cursore del mouse. Ad esempio, premere F
produrrà un effetto solo se il cursore è nella vista Scene, altrimenti non avverrà nessuno zoom.
Una volta selezionato un oggetto, con Cmd + Backspace
(su Mac) o Canc (su PC) lo si può cancellare (o ancora, mediante la voce di menu Edit > Delete
), mentre con Invio o un click (Mac) o F2
(PC), lo si può rinominare.
Parent e children
Abbiamo visto un esempio di Hierarchy molto semplice, ma in generale il numero di oggetti in scena può diventare elevato. Per organizzare la scena in maniera più gestibile, esiste la possibilità di organizzare gli oggetti collegandoli fra loro o, in altre parole, mediante il rapporto 'parent-children'.
Quest'operazione definisce un oggetto padre, che è l'oggetto che contiene gli altri, ed uno o più oggetti figlio (i cosiddetti children), ovvero gli oggetti contenuti nel primo.
Per creare la connessione fra due oggetti, basta che nel pannello Hierarchy venga trascinato l'oggetto che deve diventare Child sopra quello che sarà il Parent. Il cursore diventa una freccia ricurva, ad indicare che l'oggetto verrà imparentato con quello su cui si sta trascinando, che viene evidenziato in azzurro.
Ad esempio, se creiamo due cubi, li rinominiamo, e poi trasciniamo il cubo Child Cube sopra Parent Cube:
Il risultato è questo:
Ovvero, il ChildCube
ora è agganciato al ParentCube
. La conseguenza di questo collegamento è che l'oggetto figlio subisce molte delle trasformazioni effettuate sul padre. Alcune di queste proprietà saranno oggetto di lezioni successive, quindi ci limitiamo a menzionarle rapidamente:
- quando un oggetto parent viene disattivato, anche tutti i figli diventano inattivi;
- quando viene cancellato o distrutto da codice anche i figli scompaiono (queste valgono sia quando viene fatto nell'interfaccia di Unity, sia via codice).
Il collegamento parent-children può avvenire anche su più livelli, ovvero un oggetto può essere parent di altri ma a sua volta figlio di un terzo, e così via. Per questo motivo, è sempre utile organizzare la propria scena in scatole cinesi, ed un buon trucco è di avere una serie di oggetti vuoti che fanno da parent per tutti gli oggetti di un certo tipo.
Ad esempio, in un tipico gioco action tutti gli oggetti che rimangono fermi (pezzi di scenario, il sole, ecc.) potrebbero essere children di un unico oggetto vuoto chiamato Static Objects
, un altro oggetto vuoto Moving Objects
potrebbe contenere il giocatore e tutti i nemici, e così via.
Così facendo in qualunque momento si potrebbero disabilitare tutti gli oggetti statici con un solo click, e riabilitarli altrettanto facilmente in un secondo momento.
Trasformazioni parent-children
La conseguenza più importante del rapporto parent-children è che quando il parent viene scalato, mosso o ruotato, i children vengono trasformati insieme a lui. Questo vuol dire che se un oggetto parent viene scalato del 200%, anche i suoi children vengono scalati del 200% rispetto alla scalatura che avevano al momento in cui sono stati collegati a lui.
Ad esempio, creiamo due cubi sulla scena (mediante GameObject > Create Other > Cube
), e spostiamo uno dei due di poco in modo che non siano sovrapposti. Chiamiamo quello al centro della scena ParentCube
, e quello spostato ChildCube
.
Scaliamo il cubo figlio tramite lo strumento scalatura, fino a farlo diventare circa il doppio della sua dimensione. Ora, lo facciamo diventare child trascinando il suo nome su quello di ParentCube
nel pannello Hierarchy.
Ora scaliamo il ParentCube
come abbiamo fatto per il primo cubo, a circa due volte la sua dimensione. Noterete che il ChildCube
lo segue, diventando ancora più grande:
Inoltre, se selezionate i due cubi uno alla volta, potrete vedere che nel pannellino Inspector (che vedremo più avanti in dettaglio) il valore di Scale
nella scheda Transform è più o meno 2
sia per il ChildCube
sia per il ParentCube
.
Però, visto il rapporto parent-child, anche se hanno lo stesso valore di scalatura il ChildCube
risulta sensibilmente più grande perché la sua scalatura è il 200%
(sua) del 200%
(il parent), quindi è in pratica scalato del 400%
.