Qual è la limitazione più grave di Unity? [chiuso]


30

Dopo aver letto questa accesa domanda su Unity vs. UDK vs. ID qualcosa, sono curioso di sapere: quali sono le limitazioni più colpite e paralizzanti di Unity?

Al fine di mantenere questa domanda non soggettiva, sto di nuovo parlando dei principali offensori ripetuti di Unity. Questo è qualcosa che, come utente Unity, vorresti davvero che qualcuno ti avesse detto prima di iniziare a usarlo.

Ho sentito da qualcuno che Unity non si occupa bene del controllo delle versioni, poiché genera molti file binari (che non sono diffusi). Questo, per me, non è davvero paralizzante mentre lavoro da solo.

Pensieri?


1
DV ma nessun commento e su una domanda di 2.5 anni? Perché?
ashes999,

Probabilmente ci siamo imbattuti casualmente. Questa domanda è chiaramente basata sull'opinione sin dall'inizio. Dire "Al fine di mantenere questa domanda non soggettiva" non la rende non soggettiva perché l'autore del reato ripetuto che ritieni più fastidioso non sarà lo stesso dell'autore del reato dell'utente successivo. Tali elenchi hanno poco o nessun valore e aiutano solo a far rispettare i miti, ad esempio se tutti dicessero "X è la cosa", ma X viene riparato in un aggiornamento di Unity una settimana dopo, ma le risposte di alto livello probabilmente non vengono modificate con "X un enorme problema "in cima alle loro liste anche anni dopo.
LearnCocos2D

Inoltre, quale risposta è accettabile come quella corretta ? Se ci pensate, nessuna delle risposte dovrebbe essere accettato come la risposta, perché non c'è modo giusto per rispondere a questa domanda. Questo è probabilmente l'indicatore numero 1 di una domanda soggettiva.
LearnCocos2D

Risposte:


33

Consentitemi di premettere che i ragazzi di Unity sono stati abbastanza bravi a sentire i grandi problemi che la loro comunità deve affrontare e alla fine si promettono di migliorare le cose. Ci sono anche molti problemi che emergono solo su determinate piattaforme o sono una questione di preferenze personali o problemi specifici del gioco su cui stai lavorando.

Detto ciò:

1) Scarsa integrazione del controllo del codice sorgente e strumenti di gruppo di grandi dimensioni. Come hai detto, molti file binari non diffusi. L'editor ignora il flag di sola lettura per i file di scena. I file effettivi da controllare non sono immediatamente evidenti. Parte di questo è stato corretto in 3.5 con l'integrazione di SVN e P4. Ci sono anche promesse di formati di scene basate su testo. AGGIORNAMENTO: il formato scena basato sul testo è ora disponibile nella versione Pro di Unity. Vedi qui .

2) Strumenti UI lenti e programmatori. Ogni widget è una propria chiamata di disegno, che ha molto overhead su piattaforme mobili. Non esiste il concetto di cose come i pannelli con animazioni e tutte quelle altre cose fantasiose che rendono piacevole un'interfaccia utente senza farla girare da solo. C'è una promessa di un nuovo sistema di interfaccia utente sulla roadmap (3.6?). Ci sono alcuni strumenti di terze parti ma non sono grandi.

3) Editing di particelle davvero rudimentale. Stanno promettendo un nuovo sistema basato su curve in 3.5, però. AGGIORNAMENTO: questo sistema basato su curve, chiamato Shuriken, è ora disponibile. Vedi qui .

4) Non è possibile nidificare prefabbricati. Un piccolo problema ma quando sei abituato a lavorare con il sistema prefabbricato e tutta la potenza che ti fornisce, può diventare frustrante. Questo è stato promesso ma nessuna data specifica. AGGIORNAMENTO: ora puoi nidificare prefabbricati.

5) Quasi impossibile ottenere un gioco iOS al di sopra del limite di trasmissione. Il binario da solo è come 8 mega nel migliore dei casi. Questo non è qualcosa che è facilmente risolvibile.

6) Eccezioni di riferimento null piattaforme di crash che non consentono il codice compilato JIT. Nelle versioni standalone o Web, gli NRE vengono catturati. È ancora un'eccezione non rilevata, ma almeno l'applicazione proverà a continuare l'esecuzione. Su iOS, si blocca il dispositivo. Puoi metterlo in modalità debug e rilevare alcuni tipi di eccezioni, ma le prestazioni ne risentono.

7) Quando lavori su un gioco multipiattaforma, ogni volta che cambi obbiettivi di costruzione devi reimportare tutto e ciò richiede molto tempo. Ho risolto il problema in realtà avendo solo più copie del progetto su disco. Apparentemente c'è un asset server importato in arrivo in 3.5.


1
@iamcreasy, adatta a te, DUDE. "Mentre Dropbox funziona come un servizio di archiviazione, il suo focus è sulla sincronizzazione e sulla condivisione. Supporta la cronologia delle revisioni, quindi i file eliminati dalla cartella Dropbox possono essere recuperati da qualsiasi computer sincronizzato. [33] [34] Il controllo della versione di Dropbox aiuta anche gli utenti conoscono la cronologia di un file su cui potrebbero attualmente lavorare, consentendo a più di una persona di modificare e ripubblicare i file senza complicazioni di perdita del modulo precedente. [35] La cronologia delle versioni è limitata a 30 giorni. Un'opzione a pagamento per è disponibile la cronologia delle versioni illimitata denominata "Pack-Rat". " -Wikipedia
Ingegnere

6
Forse sono ingiusto, ma sto pensando che NullReferenceExceptions sia un errore del programmatore; dovresti controllare i tuoi parametri in arrivo. Certo, sarebbe più facile da applicare se avessimo una sorta di componente aggiuntivo di analisi del codice per MonoDevelop come se fossi in VisualStudio ...
chrish,

1
@ ashes999 C'è sempre un po 'di terminologia che dovrai imparare, con una nuova tecnologia. Le parole sono i nostri punti di forza sui concetti. Lo stesso vale anche per Flash di base. Il clamore sull'usabilità di Unity non è per niente però. Riduce le barriere all'ingresso per gli sviluppatori non professionisti e consente ai professionisti di fare molto, molto di più con molto meno. Non preoccuparti troppo delle presunte limitazioni. È probabile che la maggior parte di loro non sia nemmeno una barriera per te. L'unica cosa di cui mi preoccuperei sono le eccezioni del puntatore null, e queste sono debuggabili.
Ingegnere,

3
In che modo la risposta di Tedrad regge ora in Unity 4.1.x? Qualcuno sa?
Sil

1
Quando dici "Ora puoi nidificare prefabbricati" A cosa ti riferisci? Forse questa funzionalità è stata rimossa dall'ultima modifica della domanda? O ti riferisci a questo componente aggiuntivo ?
NauticalMile,

6

Quando io e un amico abbiamo valutato Unity per un progetto più grande, abbiamo scoperto che uno dei problemi maggiori era rappresentato dalle prestazioni con il loro skin software. Se ricordo perfettamente che avevamo qualcosa come 10 oggetti animati con circa 1000 verts ciascuno e ho ottenuto 20 fps mentre usavo un computer di fascia media ... Non molto bene ...


A quando risale questo? Sembra che quasi tutte le versioni abbiano qualcosa nelle note di rilascio su prestazioni di skinning migliorate. Di fronte a iOS sono passati dal skinning alla GPU all'utilizzo della FPU poiché era molto più veloce.
Tetrad,

È stato un mese fa ...
Cpt.

6

Il mio problema numero uno era il controllo della versione. La soluzione? Usa DropBox per i progetti Unity. Se lo hai impostato correttamente (ovvero paga per il servizio "PackRat"), mantiene la cronologia delle revisioni. È anche molto più facile collaborare con i progettisti, in questo modo, che non vogliono conoscere il tradizionale controllo delle versioni, DropBox offre loro una soluzione trasparente. Il rovescio della medaglia è che le ramificazioni / fusioni non sono realmente supportate nel modo in cui sono ad es. git, SVN.

Per coloro che dubitano ...

Mentre Dropbox funziona come un servizio di archiviazione, il suo focus è sulla sincronizzazione e sulla condivisione. Supporta la cronologia delle revisioni, quindi i file eliminati dalla cartella Dropbox possono essere recuperati da qualsiasi computer sincronizzato. [33] [34] Il controllo della versione di Dropbox aiuta anche gli utenti a conoscere la cronologia di un file su cui potrebbero attualmente lavorare, consentendo a più di una persona di modificare e ripubblicare i file senza complicazioni nel perdere la forma precedente. [35] La cronologia delle versioni è limitata a 30 giorni. È disponibile un'opzione a pagamento per la cronologia delle versioni illimitata denominata "Pack-Rat".

Vedi qui per un solido riferimento dai forum Unity.

A parte questo, l'unica cosa che ho trovato fastidioso su Unity è che non ha un punto di entrata nell'applicazione come C (main ()) o AS3 (classe documento). Ma hai appena messo la tua app init su un GameObject vuoto, non un grosso problema. Anche il flusso di codice è un po 'diverso in questa struttura intrinseca, ma ancora una volta, nulla di troppo difficile da affrontare.

Per quanto riguarda la licenza, la maggior parte delle persone non capisce (e mi riferisco in particolare alle piccole operazioni indipendenti e agli hobbisti che potrebbero non avere i soldi per pagare una licenza pro e l'addon del gestore patrimoniale) che puoi fare praticamente tutto ciò che puoi mai desiderato con l'edizione base / gratuita. Davvero, non è una grande barriera, il team Unity è stato molto generoso.


1
Dropbox, yech. Ma +1 - questo è essenzialmente ciò che stavo cercando.
ashes999,

Hehe, penso che qualsiasi sviluppatore si sentirebbe lo stesso. Ma hey, se fa il lavoro ...
Ingegnere,

2
Usiamo Git con Unity. Ci vuole un po 'di lavoro per impostare i file .gitignore, ma funziona e fornisce il set completo di funzionalità VCS.
Kylotan,

2
Usiamo Mercurial (con BitBucket) con Unity e funziona benissimo dopo aver configurato correttamente i file .hgignore.
JD,

@JD (& Kylotan) - Come hai risolto il problema con i file di scena che non potevano essere uniti?
UpTheCreek,

6

Ho pensato a un'altra grande limitazione che mi infastidisce quotidianamente, quindi posterò separatamente.

Unity3D vuole che tu modifichi i tuoi script in MonoDevelop, in particolare una vecchia versione di MonoDevelop che distribuiscono. La funzionalità "Trova nei file" di questa versione è interrotta, in quanto l'utilizzo di solito causa l'arresto dell'IDE, rendendolo inutile.

Questa sarebbe una grande irritazione con qualsiasi motore, ma è una grande irritazione con Unity perché incoraggia un sistema molto decentralizzato di componenti separati che agiscono sui vari oggetti di gioco. Ma come puoi scoprire quali componenti accedono a quali proprietà se non riesci nemmeno a cercare tra i vari componenti?

EDIT: Questa risposta è stata pubblicata nel 2011: il bug Trova nei file è stato corretto qualche tempo fa, per fortuna. E come dicono i commentatori, puoi modificare il tuo codice in altri editor (anche se la tua scelta è limitata se vuoi essere in grado di essere eseguito nel debugger).


1
Per quello che vale, puoi usare qualsiasi IDE che desideri con Unity (io uso Visual Studio Pro). Ma se vuoi usare il debugger sei limitato a MonoDevelop.
Tetrad,

1
Sì, il debugger è abbastanza importante (anche se MonoDevelop non è eccezionale). Inoltre, purtroppo dice che non funziona con Visual Studio Express. Non conosco altri IDE C # che le persone usano. Ma davvero, quello fornito con Unity dovrebbe essere in una forma migliore.
Kylotan,

Puoi anche utilizzare altri editor di testo come Sublime Texthttp: //wiki.unity3d.com/index.php/Using_Sublime_Text_as_a_script_editor
Terrance

Non l'ho provato, ma ho letto che ora esiste un modo per usare Visual Studio per il debug (tramite plugin, credo). Potrebbe essere che questo sia solo per la versione Pro, non ne sono sicuro.
Christian,

FWIW, UnityVS rende l'integrazione di Visual Studio molto più agevole. Puoi eseguire il debug, il passaggio, ecc.
Basic

5

Per me la limitazione più grave è nell'EULA:

"Restrizioni al gioco d'azzardo Non è possibile distribuire o pubblicare alcun Contenuto del licenziatario in relazione a qualsiasi attività di gioco d'azzardo senza una licenza separata da Unity."

Ciò significa che dalla v4.0, non è possibile utilizzare Unity per giochi che prevedono denaro / possibilità, a meno che tu o i tuoi clienti non sia disposto a pagare un canone aggiuntivo che viene negoziato caso per caso. Cioè vedono quanto vali e ti tassano di conseguenza, con 6 cifre che vengono citate.

Più inquietante è chi sa cosa aggiungeranno all'EULA v5. Forse tutti i giochi sociali? Forse tutti i giochi multiplayer?

Qualsiasi sviluppatore che utilizza Unity è a rischio di riscatto in una versione futura.


4
Qualsiasi strumento o software di terze parti potrebbe aggiungere (o rimuovere) clausole EULA nelle nuove versioni. Non vedo davvero come questo sia specifico per Unity. Inoltre, senza prove a sostegno sembra strano affermare che la clausola di non gioco d'azzardo sia abbastanza grave da essere la limitazione più dannosa del software in generale, che è ciò a cui la domanda originale (ora dichiaratamente fuori tema) stava cercando di ottenere. A meno che la maggior parte dei giochi di Unity non siano stati fatti affidandosi al gioco d'azzardo come caratteristica fondamentale, questa risposta sembra più simile a uno sfogo.
Josh,

4

Buona domanda. Per me, il problema più grande è la GUI. Non mi dispiace che sia incentrato sul programmatore, ma mi preoccupo del modo terribile in cui gli oggetti GUI sono funzioni piuttosto che un oggetto e che la gestione della GUI è tutta inserita in una chiamata di funzione che viene utilizzata per il rendering e la gestione degli eventi, e che non c'è integrazione con il sistema di input (il che significa che i clic sugli elementi della GUI possono essere interpretati come clic nel mondo), ecc.

Un problema secondario è la mancanza di un adeguato supporto per il controllo della versione (principalmente perché il sistema utilizza il layout della directory come layout del progetto, che confonde il VCS quando si spostano o rinominano le cose), ma questo può essere risolto e non è un problema per tutti.


È possibile eseguire una query sul sistema della GUI per vedere se un clic è stato utilizzato da esso, quindi ignorare il clic nel codice di selezione del tuo oggetto mondo. Ingombrante, ma funziona.
Sean Middleditch,

Come lo faresti?
Kylotan,

C'è una proprietà sull'oggetto del sistema di input per ottenere l'id dell'elemento "hot", che sarà zero se non c'è alcun elemento GUI sotto il cursore. Dimentica il nome esatto della proprietà, tuttavia dovrebbe essere nel riferimento di scripting di unità.
Sean Middleditch il
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.