Qualche tempo fa, durante l’incontro annuale di AltDevConf 2012, Miguel de Icaza ha partecipato con un talk dal titolo “Mono for Game Development”. Una presentazione interessante (che trovate nel link) che dava una panoramica piuttosto completa dell’utilizzo di C# e di Mono nello sviluppo videoludico e dei vantaggi che ne conseguono.
Ok. Una presentazione di de Icaza sui vantaggi di Mono suona molto come chiedere all’oste se il vino è buono. Tuttavia l’argomento è interessante e lancia subito una domanda: “Mono e C# sono veramente linguaggi utili e con un futuro nello sviluppo di videogame?”
C#
Innanzitutto va precisata una cosa: C# è un ottimo linguaggio. Che che ne dicano i detrattori di qualunque cosa sia Microsoft, C# è uno dei migliori linguaggi staticamente tipizzati in circolazione ed il tentativo di Mono di portare su altre piattaforme quella che sarebbe stata una tecnologia limitata a Windows è da ringraziare.
Il C# è un linguaggio che a prima vista ricorda molto il Java ma si differenzia da esso per essere molto più snello, avere una sintassi più pulita ed intuitiva e, al contempo, la possibilità di spingersi più a basso livello. Per esempio in C# possiamo implementare l’incapsulamento degli attributi di una classe in questo modo:
public string Nome
{
get
{
return nome;
}
}
Questo creerà un’attributo pubblico “fittizio” chiamato Nome accessibile normalmente ma vincolato dalle funzioni “get” e “set” in esso contenute (in questo caso, non essendoci “set”, Nome è un’attributo in sola lettura).
Allo stesso tempo però C# mantiene un gran numero di elementi di basso livello (come le “struct”) che permettono un’integrazione diretta, quasi nativa, con il codice C e C++. Insomma, per i miei canoni è un ottimo strumento di lavoro.
Detto questo rimane la domanda iniziale: C# ha ed avrà un ruolo chiave nel settore ludico?
XNA e Unity3D
Per quanto mi riguarda la risposta è positiva e i motivi sono principalmente due:
- C# è un linguaggio che offre un ottimo compromesso fra l’immediatezza poco performante di un linguaggio di scripting e la complessità efficiente di un linguaggio di basso livello. Questo gli permette di soppiantare (totalmente?) l’uso dello scripting nei giochi (come per l’AI) migliorando le prestazioni.
- XNA e Unity3D (non c’entra Ubuntu stavolta). Due game engine che utilizzano C# come linguaggio predefinito che hanno riscosso enorme successo.
Mentre il primo è un motivo, se mi permettete il termine, oggettivo, il secondo sembra una marchetta. In realtà XNA ha avuto e probabilmente avrà un ruolo chiave nello sviluppo videoludico, specialmente per il settore indie.
XNA, per chi non lo conoscesse, è un ottimo game engine e ha permesso in questi anni la realizzazione di numerosi giochi indipendenti di successo (per esempio Magicka di Arrowhead Game Studio o Bastion). Uno dei grandi punti a favore di XNA è la possibilità di operare sia ad alto livello (entità, scene, collisioni e input), sia a basso livello (ad esempio con la possibilità di scrivere uno shader o di personalizzare la rappresentazione di un vertice variando il numero di bit da allocare e il modo di utilizzarli nella memoria video).
Lo svantaggio principale di XNA è il solito di ogni tecnologia Microsoft: gira solo su prodotti Microsoft (Windows, XBox e Windows Phone). Il corrispettivo di XNA per Mono, chiamato MonoGame, che dovrebbe colmare questa lacuna, è ancora incompleto (attualmente è implementata solo la parte 2D di XNA), speriamo ancora per poco.
Un’altro famoso game engine utilizzato massivamente dalla comunità indie (e anche da alcune realtà commerciali) è Unity3D. Questo è un motore gratuito (tuttavia con una licenza gratuita più restrittiva di XNA) dotato di un editor grafico e integrato con MonoDevelop. Il punto di forza di Unity è il numero di piattaforme su cui gira: è possibile infatti rilasciare giochi scritti in Unity su PC, Mac, Android, iPhone, PS3, XBox, Wii e un’altro paio di piattaforme. Sfortunatamente fra queste, al momento, non c’è Linux.
Le Alternative Open
Ovviamente non di solo codice proprietario è fatto il mondo e ciò vale anche per i game engine Mono-based. Nel mondo open source ci sono fondamentalmente due motori C# per giochi:
- Axiom 3D: giunto alla versione 0.8 rappresenta un wrapping di OGRE in C#.
- Delta Engine: giunto alla versione 0.9.4, Delta Engine è un motore di gioco scritto interamente in C#.
Personalmente non ho provato nessuno dei due ma ne ho sentito parlare in modo positivo.
Il Futuro
In definitiva, se avete sogni di game development è bene quindi fare un pensierino ad imparare il C# poiché, come abbiamo visto, oltre ad essere divertente (almeno per me lo è) è utilizzato da due dei più promettenti motori di sviluppo attualmente disponibili.
C# e Mono hanno dimostrato ampiamente di avere tutte le carte in regola per essere nel prossimo futuro uno strumento importante nello sviluppo di videogame e le future versioni del linguaggio promettono vantaggi ancora più importanti.
Pingback: Visto nel Web – 20 « Ok, panico
Pingback: Mono, C# e il Game Development | System-OverFlow