Il principale "pro" di Uinty3D è che è follemente veloce. Non sto parlando di prestazioni qui, ma di velocità di sviluppo. Hai:
- Pipeline di risorse unificate. Non è necessario dedicare tempo al sottosistema di risorse, nessuna routine di importazione buggy da scrivere e correggere: basta rilasciare un file nella cartella e funziona.
- Editor di livelli integrato. Non c'è bisogno di perdere tempo con strumenti di livello: basta andare subito al business.
- Ottimo supporto per il ritocco e il debug: tutte le variabili di gioco sono mostrate proprio mentre giochi e possono anche essere cambiate al volo - e tutto questo senza scrivere una sola riga di codice. Metti in pausa il gioco in qualsiasi momento o passa in rassegna il codice un'istruzione alla volta.
- Libreria abbastanza completa di componenti già pronti. Rendering, suono, fisica, controlli - molto codice "boilerplate" è già scritto.
- Mono come host di script. Mentre si può discutere dei meriti di C # come linguaggio, la libreria di classi base di Mono offre una vasta gamma di funzioni. Collezioni, I / O, multithreading e LINQ follemente espressivo accelerano notevolmente lo sviluppo.
Inoltre, Unity3d è davvero buono su più piattaforme. Ovviamente, non puoi creare, per esempio, un gioco .exe per Windows e poi magicamente farlo "funzionare" sull'iPhone; ma Unity ci si avvicina molto. Ciò che è richiesto è "ritoccare" più di "porting".
Naturalmente, in alcuni casi Unity3D non è l'ideale. Il multiplayer di rete integrato in Unity è OK per alcuni giochi peer-to-peer LAN, ma tutto ciò che richiede un server centrale richiede praticamente di scrivere tutto il codice di rete da zero. Il sistema di GUI di Unity è piuttosto bizzarro e lento, quindi creare complesse GUI in-game è una seccatura. Tuttavia, anche tutti gli altri sistemi di interfaccia grafica di gioco che ho visto sono dolorosi, quindi quello di Unity non è poi così male.
E, naturalmente, Unity3D è un po 'meno flessibile dei "motori di gioco" come OGRE, che offrono solo un codice libreria / sorgente. Le sue prestazioni non sono esattamente di prim'ordine e poiché hai solo una sandbox per gli script, non puoi usare alcuni hack intelligenti di basso livello per migliorarla. Ad esempio, se il renderizzatore di alberi integrato di Unity non ti soddisfa per qualche motivo, non puoi scriverne uno tuo (beh, potresti, ma funzionerebbe attraverso gli script e molto probabilmente sarebbe troppo lento e troppo fastidioso ). Tuttavia, è possibile fare qualsiasi cosa con Unity purché non ti dispiaccia perdere un po 'di prestazioni.
Il più grande "truffatore" di Unity3D, tuttavia, è il controllo del codice sorgente. Come già accennato, il proprio Asset Server di Unity costa un bel centesimo. E fa schifo, davvero, molto difficile. Non ha nemmeno ramificazioni. Mentre Unity3D supporta teoricamente sistemi SCM di terze parti, il loro utilizzo è anche pericoloso. Ho visto le impostazioni di importazione "magicamente" cambiare dopo il commit SVN, oppure i parametri di tutti gli oggetti scompaiono dopo aver usato Perforce. Tutti questi possono essere aggirati, ma Unity3D + Controllo sorgente = dolore.
Quindi, per rispondere effettivamente alla tua domanda. Credo che Unity3D sia uno dei migliori, se non il migliore, motore di gioco per un "piccolo" gioco. Soprattutto in fase di prototipo.
Detto questo, se stiamo parlando di un progetto educativo, mi sconsiglio. Per sapere come funzionano i giochi, è meglio scriverne uno il più basso livello possibile. I motori di gioco sono un ottimo strumento; ma per usarlo per ottenere i massimi guadagni, è necessario capire come funzionano e perché funzionano in questo modo. E il modo migliore per imparare questo è scrivere il tuo motore di gioco, anche se alla fine risulta scadente.