Negli ultimi 20 anni, l’immagine dello sviluppatore di videogiochi ha subito dei cambiamenti molto drastici: si è passati dall’idea del gioco creato in un garage degli anni ’90, fino ai moderni studios che contano centinaia di ingegneri e diversi milioni di dollari di budget, anche fino a 500 se pensiamo al detentore del record “Destiny”: ma oggi è ancora possibile sviluppare un gioco, da soli o con pochi collaboratori, senza disporre di budget stratosferici ed avendo la sola passione come motore?
Ho iniziato ad interessarmi alla programmazione dei videogiochi agli inizi degli anni 2000, quando gli smartphone ancora non esistevano ed il PC era la piattaforma preferenziale per tutti i videogiocatori che non avevano ceduto al fascino della Playstation. In quel periodo sì, fui capace di realizzare uno, seppur molto breve, sparatutto 3D Quake-style tutto da solo, senza spendere una lira e “pubblicarlo” anche allegato alla rivista The Games Machine, in quella che al giorno d’oggi sarebbe la sezione degli Indie games. Poi è arrivata la Playstation 2, l’Xbox e tantissimi soldi riversati dall’industria al fine creare produzioni sempre più appaganti, sia dal punto di vista tecnico audio-visivo che dal versante del gameplay. E non c’è stata quasi più partita.
Sviluppare un gioco, anche se hai una buona idea, ma scrivendolo da zero, è una vera impresa titanica. Io stesso ho provato a sviluppare diverse idee, sia su Xbox 360 che su PC, senza mai riuscire a cavarne nulla di buono: arrivati ad una demo giocabile, sviluppata magari in 1/2 anni, ti accorgevi che la strada che porta al gioco completo sarebbe stata eterna: la passione non sempre è sufficiente.
La stessa strada che portò all’avere giochi sempre più complessi, belli e costosi, creò però anche la necessità per gli studi professionali, di avere strumenti di sviluppo veloci, versatili e creati da persone specializzate: nasce così il motore grafico “su licenza”, ossia la possibilità di comprare un componente software che fa quasi tutta la parte difficile (specialmente il rendering 2D/3D, l’audio, la fisica, le animazioni etc…) lasciando allo sviluppatore il solo piacere di realizzarci il gioco intorno.
Inizialmente il costo di questi middleware era esagerato: ricordo che una licenza del mitico Unreal Engine 3 costava, agli inizi, qualcosa come 1 milione di dollari! Ma per fortuna la rete a volte rende le cose più facili, e complice anche il parallelo sviluppo delle piattaforme mobili, cominciano a nascere versioni gratuite di questi motori, i quali, a patto di rinunciare alle features più “spinte”, permettono lo stesso di poter sviluppare un gioco degno di questo nome.
E negli ultimi anni, è sicuramente Unity 3D ad essere il Re indiscusso dei motori grafici “gratis”. In queste serie di articoli, l’obbiettivo è quello di darvi qualche dritta per riaccendere in voi la voglia di sviluppare un gioco, perché oggi grazie a questi strumenti è di nuovo possibile svilupparne uno (quasi) da soli, ambendo certamente al solo mercato mobile piuttosto che alle patinate console di nuova generazione, che rimangono ancora abbastanza inaccessibili (nonostante entrambe abbiamo aperto parecchio verso gli sviluppatori indie).
Per raggiungere tale scopo, vi racconterò come ho realizzato, in completa solitaria, in circa 12 mesi di lavoro ed investendo la modifica cifra di 50 euro, il mio gioco per Android: Spacejunk (in calce troverete qualche riferimento al gioco). Parleremo inoltre delle possibilità di integrazione dei social media, ed ancora di quali sono le possibilità per monetizzare il vostro lavoro nel caso lo vogliate rendere gratuito all’atto del download.
Alcune premesse sono però d’obbligo prima di proseguire:
- Questi articoli non vogliono essere una guida passo-passo, ne esistono già a decine e la documentazione ufficiale è corposa e ben realizzata, piuttosto una panoramica di qual è l’approccio da usare se si vuole sviluppare un gioco con Unity.
- Non è la bontà dello strumento di sviluppo a rendere grande un gioco, ma è la sua idea. Per cui dovete avere un’idea valida prima di cimentarvi nello sviluppo.
- E’ necessario, anche con un prodotto fantastico e versatile come Unity, avere un buon background di programmazione (nello specifico serve dimestichezza con il linguaggio C# di Microsoft): Unity da solo non può scrivere in codice le idee che avete nella testa.
- Tanto tempo e tanta pazienza sono d’obbligo: anche per progetti che all’apparenza sembrano facili è richiesta molta dedizione, forza di volontà e la consapevolezza che solo con il duro impegno si ottiene un risultato.
La prima cosa da fare è ovviamente scaricare 1.3GB di Unity, reperibile all’indirizzo http://unity3d.com/unity/download e procedere con l’installazione. Unity è disponibile sia in versione gratuita che Pro, e le differenze risiedono in alcune funzionalità avanzate che per un progetto di basso e/o medio livello su hardware da smartphone sono a mio giudizio trascurabili. Se il vostro produrrà più di 100.000 $ di introiti, allora non sarà più possibile usare la versione free ma sarà necessario acquistare la licenza Pro.
Una volta lanciato Unity, già durante la creazione del primo progetto di test, vi potrete accorgere di quanti strumenti preconfezionati avete a disposizione, così che potete scegliere di includere diversi package per ogni genere di necessità.
L’area di lavoro è essenzialmente suddivisa in 2 macro zone: quella dove avete gli strumenti visuali (editor) per modellare i componenti del vostro gioco, e quello più rude ma affascinante che è invece l’IDE per la scrittura degli script in C#, ossia il MonoDevelop.
A questo punto è il momento di cominciare ad approcciare Unity, perché visto così sembra di essere alle pendici di una grande montagna: sai di poter arrivare in cima in diversi modi e con molti strumenti, ma devi cominciare a progettare l’approccio iniziale per aggredire la scalata.
Essenzialmente, si deve cominciare a suddividere gerarchicamente il progetto: Unity ragiona ad alto livello con le “scene”. La scena rappresenta l’unità fondamentale di tutto lo sviluppo, ed è l’amalgama di più scene a comporre il gioco. Per sviluppare Spacejunk ho costruito circa 40 scene differenti: 30 di queste sono i livelli di gioco (1 scena = 1 livello), e gli altri 10 vanno a costituire i vari menu. Nell’immagine che segue, potete vedere una basilare e schematica suddivisione gerarchica delle scene, adatta a qualsiasi tipologia di gioco:
Cominciate anche voi con un bel diagramma, per fissare i punti chiave della navigazione: sarà molto importante per avere uno schema mentale del flusso che devono seguire le scene.
Qualche paragrafo più in su, ho insistito sul fatto che per iniziare a sviluppare qualcosa, è necessario avere le idee ben chiare, in quanto la complessità di un gioco, anche all’apparenza semplice, è molto elevata. Ci sono tantissimi aspetti di cui prendersi cura, diversi dettagli da plasmare che richiedono tempo e idee, e soprattutto molte ore di test! Qualunque sia la tipologia di gioco, credo vi sarà utile avere una breve lista di punti chiave da tenere ben presente prima di cominciare a lavorare con Unity:
- Fissare con chiarezza le regole primarie del gameplay: ciò è necessario per creare le sovrastrutture che dovranno governare il vostro gioco. Prendendo ad esempio il mio “paziente” Spacejunk, il gioco è basato su una serie di regole di posizionamento di alcuni elementi sparati dal giocatore su una griglia di forma variabile. Ho quindi dovuto creare uno script per la singola cella, uno per gestire le righe, uno per le colonne ed ancora una per la griglia nel suo complesso. Date dei compiti precisi alle entità, mantenendo sempre un’astrazione tale a poter rimescolare le carte anche a sviluppo in corso (cosa che succede non di rado!)
- Definite cosa può e cosa non può fare il giocatore. Creare anche il suo sistema di interazione, fornendogli lo schema degli input per muoversi nel mondo di gioco
- I fondali e gli oggetti 2D e/o 3D che rappresentano il mondo di gioco
- Una o più telecamere che sono il punto di vista dal quale il giocatore vedrà il vostro mondo
- Le musiche di accompagnamento e gli effetti sonori
- L’interfaccia grafica, dove mostrare le informazioni sulla partita in corso
- Un sistema efficace, magari un tutorial, per spiegare come si gioca
- Gestire i meccanismi di ricompensa verso il giocatore e bilanciarne la difficoltà
- Pensare ad un sistema di salvataggio e caricamento dei progressi
- E potrei continuare per pagine e pagine….
La forza di Unity sta nel fatto che tutti questi elementi sono gestibili graficamente, e ciascuna entità avrà il suo posto nella gerarchia della scena. Inoltre ad ognuna di esse è “attaccabile” uno script, che eseguito ad ogni frame darà vita e forma alla vostra entità di gioco.
Gli elementi verranno mostrati nell’area “Hierarchy” con una gerarchia ad albero, e sarà possibile selezionandone uno o più avere accesso, nell’area “Inspector”, a tutte le sue proprietà, come ad esempio la posizione XYZ nel mondo di gioco, il tipo di materiale fisico da cui è composto ed una vasta serie di parametri per definirne l’aspetto visivo: il numero di possibilità è davvero immenso. E’ impossibile, e forse anche inutile, elencarvi tutti i parametri di configurazione a disposizione perché sono davvero centinaia, vi basti però sapere che, almeno per questa fase della progettazione, è sufficiente usare l’editor grafico senza bisogno di scrivere alcuna riga di codice. Potete manipolare gli elementi cliccando direttamente su di essi nella preview 3D (come in figura 4), trascinarli o ruotarli con il mouse e molto altro ancora.
Grazie a Unity non è più necessario saper modellare una pipeline di rendering, maneggiare un frame buffer o scrivere uno shader: c’è un team di centinaia di ingegneri del software che lo sta facendo al posto nostro, e noi possiamo stare qui a pensare solo al nostro meraviglioso gameplay, dedicando la maggior parte del nostro tempo a costruire il gioco piuttosto che a debuggare il motore grafico.
Concepii il primo concept originale di Spacejunk nel lontano 2007 mentre tornavo a casa da lavoro. Facevo già il programmatore (non di giochi) per professione, ed avevo già avuto modo di sviluppare un motore grafico con le DirectX 8/9 qualche anno prima… decisi quindi di cimentarmi con l’SDK della mitica Xbox 360, misi in piedi un team di 5/6 grafici e designer reclutati per passione e mi dedicai personalmente allo sviluppo del motore. Dopo un intero anno, a malapena completai la gestione del rendering e del gioco vero non vi era che un abbozzo… ma il tempo passava, e più spendevo tempo per migliorare l’engine, meno ne dedicavo al gameplay: dopo quasi due anni di lavoro decisi di cancellare il progetto, semplicemente perché non avevo il tempo e le risorse per poterlo fare.
Ma l’anno scorso, agli inizi di marzo del 2014, diedi una chance a Unity, ed esattamente dopo 12 mesi eccomi qui a scrivere di un gioco completo, con 30 livelli giocabili e con tutte le idee che volevo ci fossero a livello di gameplay. La curva di apprendimento è stata abbastanza facile (anche se ho il vantaggio di programmare per professione e sapere più o meno cosa ci volesse per fare un videogioco), e dopo pochi mesi avevo già una demo giocabile. Una delle meraviglie di questo strumento è nella sua facilità d’uso, in quella eccezionale possibilità che ti permette di modificare al volo qualsiasi aspetto del tuo mondo di gioco e vederlo prodotto in tempo reale sullo schermo, premendo solamente il tasto play.
Nella prossima puntata parleremo in maniera più dettagliata degli script, di come sia possibile creare una simulazione fisica realistica e di quali siano le opportunità multipiattaforma offerte dalla sezione di export di Unity.
Se siete interessati a vedere dal vivo il progetto Unity oggetto di questa serie completo e funzionante, Spacejunk è disponibile al download per tutte le piattaforme Android a questo indirizzo:
https://play.google.com/store/apps/details?id=fax3d.games.spacejunk