In questa lezione vediamo come fare la cosiddetta 'build', ovvero come creare un pacchetto indipendente che i giocatori potranno scaricare (o comprare da uno store, a seconda della piattaforma).
La finestra Build
Il primo step per creare una build è aprire la finestra Build Settings. Si può accedervi da File > Build Settings, o premendo Ctrl + Shift + B. La finestra si presenta così:
In alto, è presente una lista delle scene incluse nella build. Parleremo di questo fra poco.
In basso a sinistra, una lista espone tutte le piattaforme per cui è possibile creare una build. In generale, con la versione free di Unity sono presenti le tre piattaforme computer (PC, Mac e Linux), il Web Player e il Google Native Client, e i vari ambienti mobile (iOS, Android, BlackBerry).
Al momento (Unity 4.2), Windows 8 Apps e Windows Phone 8 sono disponibili solo per sviluppatori che ne hanno fatto richiesta specifica. Le piattaforme console (Xbox 360, PS3 e Wii) sono invece inaccessibili, a meno che non abbiate comprato una licenza specifica (il cui costo supera di gran lunga quello di Unity Pro).
La piattaforma di partenza è PC, Mac & Linux Standalone. Selezionandone un'altra, è sufficiente premere Switch Platform per lavorare sul gioco come se lo si volesse pubblicare su un'altra piattaforma. Nella pratica, questo implica un reimport (a volte anche lungo!) di tutti gli asset, perché Unity deve ricreare una cache con gli asset compressi per quella specifica piattaforma. Alcune cose potrebbero cambiare a livello grafico, visto che alcune piattaforme non supportano alcuni shader.
Inoltre, per ogni piattaforma si rendono disponibili alcune proprietà comuni ed altre specifiche in basso a destra nella finestra.
Development Build crea una build che mostra in basso a destra un'etichetta con questa scritta, ed abilita alcune opzioni per (appunto) build in via di sviluppo, come il profiler ed il debugging.
Vediamone alcune specifiche per piattaforma:
Web Player
Streamed crea una build i cui asset sono caricati in streaming, ovvero gli utenti quando entrano nella pagina che contiene il gioco possono iniziare a giocare quasi da subito, mentre in background vengono scaricati gli altri livelli.
Offline Deployment crea una build di dimensioni leggermente maggiori perché include delle librerie necessarie che altrimenti verrebbero scaricate da internet. Utile se avete intenzione di distribuire la build su un CD, anche se a quel punto conviene fare una versione Standalone.
Standalone
Architecture, come è evidente, permette di decidere per quale architettura fare una build. In generale se si crea un gioco Mac o Linux, non c'è motivo di non farla Universal, gli utenti apprezzeranno. Per il resto, spesso gli store accettano più versioni (32/64 bit) e lasciano scegliere all'utente quale scaricare.
iOS
Symlink Unity libraries esclude le librerie di Unity dal progetto Xcode che viene generato. Questo crea un progetto leggermente più leggero, ma che non potrà essere compilato in Xcode se l'utente non ha istallato anche Unity (perché le librerie devono essere recuperate da lì).
Android e BlackBerry
Texture Compression permette di comprimere le texture con diversi algoritmi per creare build ad-hoc per diversi processori, utili se si vogliono migliorare le prestazioni sui diversi modelli presenti in questi mercati molto frammentati.
Player Settings
Cliccando sull'apposito bottone (o dal menu Edit > Project Settings > Player
) si possono configurare altre proprietà relative al player, spesso condivise fra le varie piattaforme.
Le opzioni in alto sono comuni, e vanno dalla possibilità di aggiungere un'icona o un cursore per il mouse (che devono essere texture presenti nel progetto).
Le altre opzioni sono tante ed elaborate e vanno oltre lo scopo di questa guida. Quando vi troverete ad affrontare la pubblicazione per una certa piattaforma, il consiglio è di leggere in dettaglio il manuale per le descrizioni dei singoli settaggi della piattaforma in questione.
Scene incluse nella build
Non è raro creare degli asset che poi in seguito non vengono usati, o di creare diverse versioni di uno stesso gioco che usano asset differenti. Per questo motivo, prima di creare una build bisogna decidere cosa effettivamente ci finirà dentro, e questo viene fatto in diversi modi.
Innanzitutto per decidere quali scene del gioco utilizzare, bisogna aggiungerle nella finestra Build Settings che abbiamo visto prima. In alto c'è una lista delle scene, ed è sufficiente premere Add Current
per aggiungere una scena alla build.
La prima scena nella lista è quella da cui parte il gioco, e l'ordine anche è importante nel caso di build per web dove gli asset vengono scaricati progressivamente (vedi il parametro Streamed più su).
Per rimuovere una scena dalla build, sarà sufficiente togliere la spunta oppure selezionarla e premere Delete
. Per riordinarle, basta trascinarle come gli elementi di una lista.
Ecco un esempio di progetto più complesso, dove la scena Alpha
è stata disattivata (non verrà inclusa nella build) ed il gioco parte da una scena che si chiama Initialization
:
Il numeretto a destra indica l'ordine delle scene, ed è quello che si usa anche in programmazione per richiamare una scena nuova da uno script (anche se è possibile anche richiamarle per nome, più pratico).
Nota: Una scena non inclusa in una build non può essere caricata da uno script.
È importante sapere che quando si include una scena nella build, tutti i prefab, i materiali, gli shader, gli script, le texture ed i suoni inclusi o collegati in qualche modo alla scena vengono inclusi nella build, e ne contribuiscono al peso.
La cartella Resources
Oltre alle scene, è possibile definire che alcune cartelle vengano incluse nella build anche se al momento della creazione del pacchetto non venivano richiamate in alcuna scena. Questo è molto utile quando nel gioco vengono caricate texture o suoni di cui non si conosce il nome a priori, ma che viene generato via script.
Ad esempio, un personaggio potrebbe avere 10 diversi costumi con 10 diverse texture, nominate Clothes0, Clothes1, Clothes2, Clothes3, ecc.
Questi costumi verranno chiamati da uno script, e per far sì che vengano inclusi nella build devono trovarsi all'interno di una cartella speciale chiamata Resources. Questa cartella deve trovarsi nella root del progetto di Unity, ovvero subito all'interno della cartella Asset.
Così facendo, qualunque elemento presente in Resources verrà incluso nella build anche se non viene usato, aumentandone il peso. Di contro, qualunque elemento al di fuori di Resources non può essere caricato via codice, ed ogni tentativo risulterà in un errore.
Creare la build
In ultimo, premendo su Build viene creato il pacchetto. In genere Unity chiede dove vogliamo salvare, il tipo di file creato poi dipende dalla piattaforma.
Ad esempio, su Mac viene creato un file .app che contiene tutto il gioco. Su Windows e Linux viene creato un eseguibile ed una cartella _Data
, necessaria per far funzionare il gioco.
Per iOS ed Android vengono creati dei file di progetto (Xcode o apk) che non sono pronti alla distribuzione, ma che vanno ricompilati per le rispettive piattaforme tramite gli SDK specifici. Anche qui, ogni piattaforma ha le sue criticità e spiegare tutto in una lezione sarebbe impossibile.