Quali sono i pro / contro di Unity3D come scelta per creare giochi? [chiuso]


64

Stiamo facendo il nostro progetto scolastico con Unity3d, dal momento che stavano usando Shiva l'anno precedente (che mi sembra orribile), e volevo conoscere il tuo punto di vista su questo strumento.

Professionisti:

  • multipiattaforma, ho persino sentito che Google lo implementerà in Chrome
  • tutto ciò di cui hai bisogno è qui
  • i linguaggi di scripting lo rendono una buona scelta per le persone che non programmano guru

Contro:

  • multiplayer?
  • proprietario, sei totalmente dipendente dall'unità e dal suo limite e non puoi estenderlo
  • è meno "fare un gioco da zero"
  • Il C ++ sarebbe stato fantastico

Penso davvero che questo tipo di strumento sia interessante, ma vale la pena usarlo a scuola per un progetto che coinvolge più di 3 persone programmatrici? Cosa impariamo davvero in termini di programmazione dall'uso di questo tipo di strumento (sto bene con Python e JS, ma odio C #)? Avremmo potuto usare Ogre invece, anche se stessimo imparando direct x a partire da gennaio ...


Un altro imbroglione sarebbe che dovresti avere familiarità con la modellazione / progettazione 3D, ma un'altra occhiata al sito e questo non sembra il caso ... dato che i giochi 2D sono possibili
Johnny Quest

1
@Johnny Quest Semplicemente, non è proprio quello per cui potrebbe essere complicato da usare.
Spook

7
"Il C ++ sarebbe stato una cosa interessante" - sul serio, cosa? Scrivere in C ++ ora è "bello"? Personalmente odio la lingua (tutta la digitazione, Python fino in fondo: p), ma è certamente una grande funzionalità linguistica e una libreria saggia.
Il comunista Duck il

1
Unity è un motore straordinario ma ... Alcuni aspetti da tenere presente: 1) Unity tende ad essere un po 'un ricordo. Richiede più memoria di quanto pensi; probabilmente a causa della memorizzazione nella cache di cose come le trame. Ciò può causare problemi di debug e persino errori OOM sui dispositivi mobili. 2) I problemi di prestazioni possono essere difficili da individuare, indirizzare e risolvere poiché hai a che fare con una scatola nera (nessun codice sorgente). Esamina attentamente i tuoi shader e osserva come gestisci la scena.
milkplus,

2
@milkplus: ecco perché penso che l'unità non sia ciò con cui lo studente dovrebbe imparare. esempio: sto bene per insegnare agli studenti sulla programmazione, insegnando loro inizialmente a Python, ma ad un certo punto, devi insegnare loro come funzionano le cose di livello, anche le basi. Le persone dovrebbero usare uno strumento quando sanno tutto su ciò che fa quello strumento. In caso contrario, è un disastro in attesa di accadere. Non puoi sempre giustificare la citazione di Knuth con qualcosa di così complesso come l'unità.
jokoon,

Risposte:


66

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.


3
citerò "Pipeline di risorse unificate. Non c'è bisogno di passare del tempo sul sottosistema di risorse, nessuna routine di importazione con errori per scrivere e correggere: basta rilasciare un file nella cartella e funziona".
nkint

7
e "Il più grande" truffatore "di Unity3D, tuttavia, è il controllo del codice sorgente."
nkint

2
e "Detto questo, se stiamo parlando di un progetto educativo, lo consiglio contro di esso."
nkint

Informazioni sul tuo problema "albero gen". Penso soprattutto in C #, puoi scrivere un albero C ++ gen, inserirlo in un dll e trattarlo come c ++ gestito. Quindi puoi teoricamente accedere alle tue "correzioni del motore" in unità.
daemonfire300

Ammetto che il sistema Unity GUI 2.0 non è altro che il sistema "render a rect with text", ma è molto facile da estendere. Guarda @AffinityUI o altri progetti di interfaccia utente Unity che sono molto leggeri, open-source e valgono il sistema UI.
daemonfire300

28

Inizierò commentando il tuo elenco:

  • Lo scripting non è solo un vantaggio per i non programmatori. Essere un (buon) programmatore è molto più che conoscere una lingua, è saper decostruire i problemi e pensare in un modo particolare. I linguaggi di scripting possono consentire a un programmatore di sfruttare quelle capacità di pensiero critico di ordine superiore al fine di produrre risultati più potenti e più interessanti in meno tempo di quanto potrebbe aver bisogno per produrre risultati equivalenti, preoccupandosi anche di dettagli di livello inferiore che alcuni linguaggi (C ++ viene in mente) forza nell'immagine.

  • Il supporto multiplayer (o la sua mancanza) è un problema in un modo o nell'altro se il tuo progetto ne ha bisogno.

  • Non riesco a vedere come "proprietario" sia un truffatore. Se questo è un progetto scolastico, probabilmente non vorrai passare il tempo a hackerare sulla fonte del framework che usi o altro. Inoltre, anche DirectX è proprietario.

  • Non c'è assolutamente nulla di sbagliato nell'utilizzo di framework o strumenti di livello superiore come Unity. "Creare un gioco da zero" non è un risultato: cosa consideri esattamente "da zero?" Utilizzerai ancora l'API grafica di qualcun altro. Runtime di qualcun altro (anche C richiede una libreria di runtime). "Fare un gioco" è ciò che guadagna rispetto, non "fare un gioco senza usare strumenti utili".

  • Il fatto che C ++ sia una cosa "interessante" è un po 'soggettivo. Il linguaggio è usato molto spesso dai professionisti del settore, ma probabilmente non per i motivi che potresti pensare. Come lingua, sta iniziando a mostrare la sua età e può essere estremamente ingombrante rispetto alle opzioni più moderne. In ogni caso, le lingue sono solo strumenti e un buon programmatore dovrebbe essere in grado di raccoglierne di nuove con relativa facilità.

Il grande vantaggio dell'utilizzo di Unity per il tuo progetto scolastico è che si tratta di un framework di alto livello con un sacco di lavoro infrastrutturale già in atto per te - questo ti permetterà di concentrarti sul tuo gioco e non sulla costruzione di una base. Presumibilmente, hai una finestra relativamente limitata in cui produrre questo gioco in modo che più puoi sfruttare gli strumenti esistenti, più tempo dovrai produrre logiche o risorse specifiche del tuo gioco e faranno apparire e sentire il tuo gioco più completo - c'è una curva di apprendimento per Unity, ma finisci con molto di più a tua disposizione molto più velocemente.

Uno svantaggio è che stai potenzialmente sprecando tempo nell'apprendimento di uno strumento specifico che coinvolge conoscenze che potrebbero non essere trasferibili, soprattutto se decidi che il flusso di lavoro e l'ambiente di Unity non fanno per te e non vorrai mai riutilizzarlo . Inoltre, Unity non ha il flusso di lavoro 2D più ovvio : è molto focalizzato sui giochi 3D, che tutte le spese generali in risorse artistiche che tendono a coinvolgere. Ma penso che, per un progetto scolastico come quello che stai descrivendo, Unity sia una buona scelta.


13
citerò "Fare un gioco" è ciò che guadagna rispetto, non "fare un gioco senza usare strumenti utili".
nkint

2
"Non c'è assolutamente nulla di sbagliato nell'utilizzo di framework o strumenti di livello superiore come Unity." Creare un gioco da zero "non è un risultato: cosa consideri esattamente" da zero? "Non c'è assolutamente nulla di sbagliato, ma arriva a ricorda che le persone che creano nuove tecnologie stanno andando al livello più basso possibile, ad esempio Uncharted 2 ha persino usato un'API grafica modificata internamente.
concept3d

1
Ogni sviluppatore che desidera essere all'avanguardia nella grafica per computer dovrà concentrarsi sul livello più basso e realizzare il proprio motore con il proprio gioco; ma questo sembra circa l'1% di tutti gli sviluppatori di giochi. Se un'azienda stesse realizzando un gioco avanzato come Uncharted 1, al momento della sua uscita, Uncharted 3 potrebbe probabilmente utilizzare un framework esistente (non necessariamente Unity). La domanda è: stai creando Uncharted 4?
Katana314,

9

Un grosso problema con Unity è il controllo del codice sorgente. Se non stai lavorando in una squadra, questo non avrà molta importanza (probabilmente), ma è molto probabile che non sia così.

È possibile utilizzare Unity Asset Server, ma ciò richiede 1) Unity Pro ($ 1500) e 2) una licenza Asset Server per sede ($ 500). Suppongo che tu possa ottenere una sorta di sconto educativo, ma non è gratuito.

In alternativa, puoi usare qualcosa come SVN con Unity. Per supportarlo correttamente è ancora necessario Unity Pro.

Non puoi semplicemente controllare una versione non pro di Unity in SVN e aspettarti che funzioni perfettamente. Il loro meccanismo per l'associazione dei GUID agli asset e così via non è esattamente sicuro per SCM.


La funzionalità multiplayer è abbastanza decente, anche se a dire il vero non ho ancora spedito un gioco. In teoria basta collegare le viste di rete alle cose e dirle cosa si desidera serializzare per impostare correttamente la replica. Da lì c'è un po 'di lavoro sull'interfaccia utente per connettersi ad altri peer e configurare. Tuttavia, è principalmente peer-to-peer. Potresti essere in grado di eseguire la programmazione client / server eseguendo l'unità in modalità senza testa, ma non ho fatto casino. Ma far girare la persona A sullo schermo della persona B è abbastanza facile e veloce da fare.

Anche C # è positivo per quanto mi riguarda. LINQ è super espressivo. Ha una corretta gestione delle eccezioni e la garbage collection. Ha paradigmi molto più moderni come delegati, lambda, interfacce e un supporto generico migliore rispetto al C ++. ( Modifica : questo è ovviamente controverso. Il mio punto è che C # non è affatto un linguaggio volgare . Non voglio entrare in un lungo dibattito sui pro e contro del linguaggio contro C ++.)

Il più grande positivo dell'utilizzo di Unity, tuttavia, è probabilmente la pipeline artistica. Puoi prendere un file PSD o Max (supponendo che tu abbia installato 3ds max) nella cartella e venga importato.


3
@DeadMG, sì, davvero molto bene. Sì, conosco boost, metaprogrammazione dei template, ecc. Ma trovo C # un linguaggio più moderno.
Tetrad,

3
@DeadMG Penso che il punto sia che C # è estremamente fluido per molti casi d'uso che C ++ lascia molto a desiderare. Non che C ++ non possa fare queste cose.
Nate

3
L'unica cosa sulla sua lista con cui potrei non essere d'accordo era "un supporto generico migliore di C ++".
Kylotan,

1
@Kylotan "per (vettore <vettore <int>> :: iteratore iteratore = score.begin (); iteratore! = Score.end (); iteratore ++) {" VS "foreach (var scoreet in score)" .. .yup, sono con C #.
Katana314,

3
@ Katana314 Naturalmente in C ++ 11: for ( auto x : xs ).
Eric

6

Aggiornamento: Unity ora fornisce tutte queste funzionalità anche nella versione gratuita, quindi ignora la risposta di seguito.


Qualcosa che vale la pena notare: se si utilizza la versione gratuita di Unity3D, non sarà possibile utilizzare diversi effetti, tra cui shader di post-elaborazione (come bloom) e, soprattutto, ombre dinamiche. Questi ovviamente non avranno molto effetto sul flusso di lavoro del progetto, ma pongono vincoli su ciò che può essere ottenuto gratuitamente con il motore.


1
Questo non è più preciso e dovrebbe essere aggiornato o rimosso.
MichaelHouse

@ Byte56 Grazie. In futuro, dovresti essere in grado di aggiornare tu stesso i vecchi post senza dover lasciare un commento.
Michael Younkin,

Stavo rispondendo a un flag per rimuovere questa risposta e non ti stavo suggerendo di aggiornarlo per dire che non è più preciso. Ti stavo suggerendo di aggiornarlo per essere accurato o di rimuoverlo. Questa risposta al momento non risponde ai pro e contro di Unity 3D come scelta. Sono sicuro che puoi trovare un modo per salvarlo però. (È possibile aggiornarlo per includere tutte le funzionalità che Unity ora fornisce e quelle che non offrono gratuitamente).
MichaelHouse

3

La risposta di Nevermind copre le cose in modo abbastanza completo, ma solo per approfondire il lato del controllo del codice sorgente delle cose, in realtà non è così terribile una volta che impari a cercare una manciata di gotcha:

  • Prima di tutto, sì Asset Server è costoso e abbastanza orribile per tutti tranne che per l'uso di base. Il suo principale vantaggio è l'integrazione in Unity, e mentre ciò è prezioso per la facilità d'uso e ne vale la pena per progetti più semplici, per qualsiasi cosa più grande (che sarebbe tipicamente i progetti con budget per AS) non è abbastanza flessibile.
  • Passando al controllo di versione esterno, è importante rendersi conto che i Meta File devono essere trattati come qualsiasi altra risorsa e sempre aggiunti / aggiornati nel controllo della versione. Non farlo è probabilmente ciò che è accaduto nello scenario delle impostazioni di Nevermind che svanisce.
  • Infine, lavorando con qualsiasi sistema di controllo versione in Unity (incluso Asset Server), la comunicazione di gruppo diventa essenziale quando si lavora con risorse binarie per evitare di calpestare il lavoro reciproco.

Nel caso in cui volessi maggiori dettagli su questi punti, ho pubblicato qualche tempo fa sull'uso di git con Unity in base alla mia esperienza in alcuni progetti Unity abbastanza grandi: http://goo.gl/ivJVR


Ok, wow, scusa il necropost. Ho appena notato che questo è stato chiesto (e risposto) nel 2011! L'ho aggiunto perché è apparso nella lettera di notizie di stackexchange di gamedev questa settimana .
FlintZA,

Non esiste "necro" su SE. Caso in questione, il mio commento. : P
Cypher

2

In realtà. Il multiplayer è supportato. Si tratta semplicemente di scegliere un server su cui si desidera eseguire il gioco.

Quello caldo sul mercato ora è "SmartFox Server" che offre alcuni pacchetti diversi, tutti gratuiti (in una certa misura). È gratuito solo se prevedi di avere un certo numero di giocatori, poiché ogni pacchetto consente un certo numero di giocatori per "libero".

Se hai scelto di aggiornare, il prezzo è piuttosto alto per uno sviluppatore indipendente. Quindi ... a lungo termine, se hai molti giocatori sul tuo server, dovrai caricare il tuo gioco piuttosto che caricarlo su siti come Download.com come gioco completo gratuito. Questo potrebbe non essere un problema per alcuni, ma la maggior parte di noi non può permettersi $ 2,500 di tasca per un server.

Ad esempio - SmartFox pro consente gratuitamente 20 giocatori. Se vuoi aggiornare ti costerà 500 euro, che è un po 'più negli Stati Uniti, circa 600-700, e che consente 100 connessioni.

Il prossimo upgrade è per un numero massimo di giocatori di 500, ed è di 1000 euro, ma ... Non devi pagare i 1000, paghi la differenza.

Quindi dovrai pagare solo altri 500 euro, anziché l'intero 1000. Gli ultimi aggiornamenti supportano un numero illimitato di connessioni, per 2.000 euro. Che è quasi $ 3.000 US.

Quindi, se esegui l'upgrade dalle 500 connessioni, paghi 1000 euro, se esegui l'aggiornamento da 100 connessioni paghi 1.5000 euro e, naturalmente, 2.000 euro per effettuare l'aggiornamento gratuitamente.

Inoltre, questo server è molto facile da configurare con Unity e ci sono numerosi video tutorial su come farlo esattamente su Youtube.


Ho lavorato a lungo con SmartFox Server dal 2005 e funziona alla grande. Molto stabile e maturo.
PippoApps.com
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.