I Game Engine

Episodio numero 50 e volevo parlare dei game engine ma proprio mentre lo stavo registrando Unity pubblicava sul suo blog l’aggiornamento del tariffario che ha creato molti malumori da parte degli sviluppatori. Qualche giorno più tardi è uscito un tweet con una sorta di spiegazione del nuovo tariffario ma gli sviluppatori si sono sentiti taditi da una delle piattaforme più utilizzate e molti di questi sono sviluppatori XR e di alcune piattaforme per la creazione dei mondi virtuali come VRChat e Spatial che sono basate proprio su Unity. Alla fine è seguito un altro post su twitter dove Unity dichiara che pubblicherà un aggiornamento sul nuovo tariffario ma al momento della ri-registrazone di questo episodio non è uscito ancora nulla, staremo a vedere.

Spesso durante i corsi qualche allievo mi chiede il motivo della scelta di Unity come game engine nei miei corsi. Premetto che non vuole essere un post da fan di uno o dell’altro, ma la mia scelta è stata fatta meramente per le possibilità che mi da uno al posto dell’altro.

Un game engine, o motore di gioco o motore grafico è un software o un insieme di software progettati per aiutare gli sviluppatori a creare videogiochi. Fornisce molte delle funz ionalità di base necessarie per creare un gioco tra cui grafica, input, suono, fisica e altre funzioni di sistema. Il game engine permette agli sviluppatori di concentrarsi sulla creazione del contenuto e del gameplay piuttosto che costruire tutta la struttura, tutto il sistema di funzionamento da zero. Ci sono dei casi nei quali la software house ha deciso di creare un proprio game engine per il progetto che voleva sviluppare in quanto i game engine non avevano le caratteristiche necessarie per lo sviluppo di alcune funzionalità. Unreal Engine è nato così. Gli sviluppatori di Unreal, il gioco, hanno rilasciato nel 1998 un editor che è diventato brevemente il motore grafico più usato dagli sviluppatori. Nel 2005 la Unity Technologies presenta il suo motore grafico Unity inizialmente solo per Mac OS che poi si amplia anche per altre piattaforme.

Il primo game engine che ho utilzzato è stato Unreal Engine di Epic Games e nel tempo ho testato anche altri come l’open source Godot, Cryengine e Lumberyard, ma quando sono rientrato nel mondo della VR, dopo l’avvento del video 360, ho scoperto Unity per un progetto che avevo in mente e lo trovai molto intuitivo, e sotto un certo punto di vista, più semplice in alcune funzioni di cui avevo bisogno in confronto ad Unreal.

Se cercate online le differenze tra i due software o li conoscete già per averci già lavorato, sicuramente sapete che le differenze sono in una resa grafica superiore di Unreal, anche se ultimamente Unity sta migliorando molto sotto questo aspetto. Unity utilizza il linguaggio C# mentre Unreal il C++ combinato al sistema di programmazione a nodi Blueprint. Recentemente anche Unity ha adottato un sistema di programmazione a nodi denominato Visual Scripting derivato dal plugin Bolt.

Le differenze poi sono nella gestione dei game object, dell’utilizzo dei Prefab di Unity e altre piccole differenze che portano a scegliere una o l’altra opzione. La mia scelta di Unity è dovuta principalmente alla compatibilità con i mondi virtuali e con le realtà immersive. VRChat, il buon vecchio AltspaceVR, Spatial.io, tutte queste piattaforme di mondi virtuali sono basate o hanno un SDK di Unity. Oltre a questo trovo la gestione dei progetti per la XR molto più semplice su Unity anche se Unreal ultimamente ha un supporto notevole per i visori. Sicuramente se fossi uno sviluppatore di videogiochi la scelta cadrebbe molto probabilmente su Unreal, ma ad ora le possibilità di Unity con le piattaforme di mondi virtuali sono superiori.

Se devo fare un esempio, il progetto AQVILINIA, trovate i passaggi di sviluppo nella sezione devlog del blog, l’ho progettato per essere fruito con il visore di mixed reality Meta Quest Pro, ma volevo che ci fosse anche una versione per VRChat e per Spatial.io. In Unity ho creato il progetto base e poi ho creato il singolo progetto, duplicando la base, per ogni piattaforma. In teoria si potrebbe creare un solo progetto e poi “declinarlo” sulle varie piattaforme, ma nella realtà non è così, anche per il fatto che ogni singola piattaforma richiede una precisa versione di Unity e solitamente differiscono tra piattaforme.

Questo modo di pensare al progetto, ovvero creare una base per poi adattarla alle varie piattaforme, lo applico su tutte le cose che ho creato ultimamante, dai tour virtuali alle installazioni immersive e su questo potete leggere nel già citato devlog.

Dopo l’affaire tariffario di Unity molti sviluppatori hanno rispolverato anche l’unico game engine open source il già citato Godot e tanti stanno migrando su questa piattaforma per non rimanere in balia di Unity e Epic.

E voi che game engine avete scelto e perché?