Preferisco C / C ++ rispetto a Unity e altri strumenti: è un grande svantaggio per uno sviluppatore di giochi? [chiuso]


35

Abbiamo un grande progetto di gioco che utilizza Unity a scuola. Ci sono 12 di noi che ci lavorano. Il mio insegnante sembra essere convinto che sia uno strumento importante per insegnare agli studenti, dal momento che fa sì che gli studenti guardino da un livello superiore a un livello inferiore.

Posso capire il suo punto di vista e mi chiedo: l'unità è un motore così importante nelle società di sviluppo di giochi? Ci sono molte aziende che lo usano perché non possono permettersi di usare qualcos'altro? Parla come Unity è un grande giocatore nella creazione di giochi, ma lo vedo adatto solo alle piccole società di giochi indie che vogliono fare un gioco il più velocemente possibile.

Pensi che l'Unità sia di così grande importanza nel settore? Mette in pericolo il valore delle competenze C ++?

Non è che Non mi piaccia Unity, è solo che non imparo nulla con esso, preferisco invece fare piccoli passi con Ogre o SFML.

Inoltre, abbiamo anche esercizi di pratica C ++, ma quelli sono solo pratica con la teoria, niente di molto.


9
Il punto di C ++ e OOP è il riutilizzo degli oggetti. Unity ne è un ottimo esempio e portabilità multipiattaforma. Offrono tutti gli strumenti necessari per lanciare un gioco su XBox o iPhone o Wii. Mi stai seriamente dicendo che preferiresti riscrivere tutto ciò in C ++ da zero?
Stephen Furlani,

2
Assolutamente no, non è quello che voglio dire. Sto solo dicendo che non mi piacciono le lingue raccolte con immondizia con cui viene spedito, e anche il fatto che non puoi cambiare il codice poiché è proprietario: non puoi modificarlo tanto quanto puoi modificare un altro motore esistente . Il tuo punto è valido, ma se ti seguo, le aziende possono anche riutilizzare il loro motore precedente invece di passare a Unity. Con Unity, ti attieni a qualcosa che non puoi davvero cambiare, questo è sempre il più grande svantaggio per me quando penso a tali strumenti: un motore proprietario non ha questo problema.
jokoon

2
Bene, puoi cambiare Unity supponendo di ottenere una licenza sorgente (che è costosa, come la maggior parte delle altre licenze sorgente professionali). Inoltre viene aggiornato abbastanza frequentemente, quindi non è davvero statico in termini di set di funzionalità.
Tetrad

Questa è sostanzialmente una domanda "quale tecnologia usare". Inoltre è più orientato alla discussione / opinione. Purtroppo non posso votare per chiudere una seconda volta ...
bummzack,

Risposte:


34

Unity è una soluzione perfettamente valida in questo contesto. Immagina per un secondo di avere 12 persone, la maggior parte delle quali sta ancora imparando il C ++, scrivendo un'applicazione di gioco complessa e di grandi dimensioni che la utilizza. Nella quantità di tempo dedicata al debug da solo probabilmente avrai potuto scrivere un altro gioco in Unity.

Non sto dicendo che saper usare il C ++ non sia importante, lo è, specialmente se hai intenzione di entrare a far parte del settore dei giochi "mainstream". Ma forse il tuo istruttore ha ragione in questo caso: usa questo progetto come esperienza di apprendimento su come pensare all'architettura di un gioco e divertiti a farlo. Nel processo, prova ad affinare le tue abilità in C ++ usando esercizi o persino a scrivere piccoli giochi nel frattempo usando SFML o qualche altro framework di base.

Al termine, avrai imparato molto, probabilmente diventerai un programmatore migliore e il tuo prossimo progetto può essere affrontato in C ++ con molta più sicurezza.


2
È interessante notare che ci sono scuole che insegnano puramente C ++ e si aspettano che gli studenti costruiscano da zero un intero motore di gioco e un gioco nonostante siano ancora in fase di apprendimento del C ++. Ovviamente, praticare effettivamente un'abilità è come la apprendi (non lezioni frontali e piccoli progetti di compiti a casa, per progetti più lunghi del semestre o di un anno), motivo per cui le scuole producono programmatori di alto livello. I programmatori che sono in grado di raccogliere strumenti come Unity molto rapidamente o qualsiasi altro motore. È meglio costringere gli studenti a imparare le cose difficili, poiché le cose facili non saranno più un problema dopo.
Sean Middleditch,

Non tutto lo sviluppo del gioco è una programmazione e l'utilizzo di Unity non significa necessariamente "evitare le cose difficili". Sottolinea semplicemente cose diverse rispetto all'implementazione da zero. Ha dato il design piuttosto che la programmazione. Se un gioco fosse stato implementato da zero, mi sarei aspettato una "arte del programmatore" molto più primitiva e nessun personaggio o trama.
wrosecrans,

43

L'unità sta crescendo in popolarità nel settore, soprattutto nelle aziende più piccole. Tuttavia, è un eccellente ambiente di insegnamento. È uno strumento di insegnamento importante, ma non particolarmente comune tra le aziende tradizionali. Va bene che non lo preferisci.

Vorrei sottolineare qualcosa qui, tuttavia, poiché vedo spesso una confusione tra gli studenti di programmazione. Le "abilità C ++" non sono molto utili a lungo termine. Quello che dovresti cercare sono le "abilità di programmazione" e le "abilità di progettazione". Se capisci i concetti del linguaggio di programmazione e come un sistema software è messo insieme, allora il linguaggio non ha molta importanza. Non mi considero uno sviluppatore straordinario, ma posso imparare una nuova lingua e produrre un codice utile in un giorno o due, perché capisco i fondamenti.

Learning Unity ti renderà migliore in C ++.


Gameforge e BigPoint sono aziende leader a livello mondiale e utilizzano Unity :)
daemonfire300,

1
+1 per essere un'ottima risposta. L'apprendimento del motore di gioco è una cosa molto importante per le scuole perché il 99% delle volte non ne farai una da zero. Essere in grado di immergersi in un motore esistente e riconoscerne le parti, discernere il flusso di dati e tali sono tutte cose fondamentali. Come accennato in precedenza, il linguaggio non ha importanza nonostante sia C / C ++ il 99% delle volte, ma essere in grado di comprendere il motore, o più in generale solo il codice di qualcun altro, è un'abilità preziosa in qualsiasi campo di programmazione ... in particolare il tempo critico di alto livello che è videogiochi :)
James

1
Non sono d'accordo con questa risposta. Per me ci sono differenze tra programmatori e programmatori. Gli sviluppatori di Unity sono programmatori, gli utenti di Unity sono programmatori. Il risultato è lo stesso, creano giochi, ma a lungo andare usare Unity può essere un problema. L'industria dei giochi è ricca e ora consente strumenti come Unity, ma per me è perché i computer sono più veloci. quindi puoi lanciare un sacco di codice, funziona: Unity è chiaramente fatto per la velocità di sviluppo, qualcosa che al mercato piace a causa dei dollari, ma non credo sia un vero vantaggio.
jokoon

14
jokoon: qual è la differenza tra scripting e programmazione? Un utente esperto di Unity scrive shader, gestisce l'ordine di rendering e scrive il codice AI. Gli "script" di Unity vengono compilati e, se lo si desidera, possono essere estesi con una codifica di basso livello onesto alla dea. E la buona codifica Unity segue gli stessi principi della buona codifica non Unity. Non c'è alcuna differenza magica tra i due paradigmi.
Gregory Avery-Weir,

9

Ci sono molte aziende che lo usano perché non possono permettersi di usare qualcos'altro?

Sì, ma "permettere" è molto più di un semplice aumento del valore del dollaro.

Sì, il set di funzionalità che Unity Pro ti offre al costo che fanno pagare è ridicolo, soprattutto considerando il fatto che si tratta di licenze di posto invece di licenze per titolo.

Ma soprattutto, è uno strumento davvero facile da usare. Non stai dedicando molto tempo alla formazione di artisti e designer su come utilizzare la pipeline d'arte. È facile dire "basta trascinare trame e modelli e sono pronti.

Inoltre, è uno dei pochissimi strumenti che in realtà ti consente di fare 3D in un browser con qualsiasi tipo di regolarità. Supportano praticamente tutte le piattaforme shader dalla funzione fissa a DX9 + oltre a Mac e Windows. Questa tecnologia da sola ha un valore inestimabile se si desidera rivolgersi al crescente mercato dei "giochi basati su browser".

Dal punto di vista della programmazione, ciò che ottieni da Unity è una solida comprensione della progettazione dei componenti (rispetto al rotolamento del tuo motore C ++, che di solito è troppo pesante dal punto di vista dell'ereditarietà), nonché un ambiente molto rapido e visivo per provare codice di gioco. Speriamo che imparerai le buone pratiche di progettazione usando Unity, che puoi prendere in consegna ai futuri motori C ++.

Certo, va bene avere una preferenza di una lingua rispetto a un'altra. Personalmente preferisco C # rispetto a C ++. Ma quale linguaggio usi è guidato dai requisiti del progetto più di ogni altra cosa. Gli sviluppatori non possono davvero permettersi di essere fanboys poiché non vuoi chiuderti fuori da un mercato perché non ti piacciono gli strumenti o la lingua per un motivo o per l'altro.

Inoltre, una volta che impari davvero una seconda lingua, puoi vedere che si tratta principalmente di raccogliere nuove sintassi e paradigmi, e di solito non è così difficile aggiungere nuovi strumenti alla cintura degli strumenti. Sì, dovresti imparare e comprendere il C ++, ma ad un livello elevato devi prima capire un buon design.


chiarimento: vuoi dire che la licenza di Unity Pro vale la pena rispetto alla vecchia Unity? Il tuo commento non è stato chiaro per me.
Kyle C

7
Non ho usato quello gratuito, solo che la patente da $ 1500 / sedile costa meno rispetto ad altre patenti di motori commerciali.
Tetrad

Al momento non ci sono problemi con la versione gratuita, ci sono solo alcune piccole restrizioni.
XandruCea,

9

Il problema principale, da quello che posso vedere, non è C ++ o Unity3D, ma piuttosto è necessaria una soluzione di alto livello o una soluzione di basso livello .

Una soluzione di basso livello è quella che ti sporca con i processi di gestione dell'input, gestione della memoria o caricamento dei modelli. Una soluzione di alto livello è quella di ottenere un pacchetto accurato, come Unity3D.

Per me, se usare Unity3D (o qualsiasi altro motore di gioco) o C ++ dipende dagli obiettivi del tuo gioco e progetto.

  • Usa Unity3D, se il tempo di sviluppo deve essere rapido e / o il tuo gioco non è ad alte prestazioni o non è di fascia alta delle prestazioni grafiche / computazionali. Se desideri concentrarti sul gioco e gli strumenti predefiniti forniti da Unity3D sono a posto, ti consigliamo di prendere in considerazione l'utilizzo di Unity3D

  • C ++ con altre librerie, se hai tempi di sviluppo più lunghi, il gioco richiede più potenza computazionale / grafica o utilizza una tecnologia che Unity3D non può incorporare.

L'aspetto positivo di Unity3D è che utilizza ancora linguaggi di scripting che rispecchiano lo sviluppo del mondo reale (C # o JavaScript). I concetti di OOP e ingegneria del software appresi (Singleton, facciata, macchine statali, decoratori, composizione) possono essere applicati in Unity3D. Aiuta a prendersi cura dei processi di cookie cutter come la gestione delle risorse, il grafico della scena, il caricamento del modello, il rendering, il salvataggio delle scene e così via. Ancora meglio, se c'è una funzionalità di cui non hai bisogno da Unity3D, puoi farlo Codifica DLL.

Da dove viene questo C ++? C ++ è un linguaggio e ci sono molti concetti di programmazione che fai in C ++ che puoi fare in Unity3D, senza gestione della memoria o forse modelli (Con Unity 3.2, le specifiche del linguaggio sono migliorate per coprire le chiusure, per esempio).

Quindi, come ho affermato, non è proprio C ++ vs. Unity3D. È più di "C ++ plus librerie / SDK o avvia il tuo motore" rispetto a Unity3D. Dipende dai tuoi obbiettivi. Per giochi di fascia alta o giochi in cui è necessario il controllo della pipeline di rendering o dell'input, è possibile utilizzare C ++ oltre a un motore che consente di pasticciare sotto il cofano. In caso contrario, vado con Unity3D come la mia scelta predefinita per i giochi 3D.

Tuttavia, la conoscenza di Unity3d non è soggetta all'esperienza, ma è un buon punto di partenza per apprendere il processo generale di sviluppo dei giochi. Ad esempio, probabilmente avrai bisogno di un semestre di studio per scrivere un renderer e caricare un modello in OpenGL, oltre a uno scenario e un input di base. Puoi farlo in Unity3D in meno di un giorno.


o lavora con Ogre3d!
jokoon

L'ultima volta che lavoro con Ogre3D è stato molto tempo fa; Penso che richieda più lavoro di Unity3D per ottenere un gioco ed è una buona via di mezzo per dare un'occhiata a come funzionano le cose nascoste.
Extrakun,

+1 su questo. Non puoi preferire C / C ++ e Unity di per sé perché è una cosa di mele e arance. Ciò che puoi preferire è l'idea di lavorare al livello più basso di sviluppo fornito da C / C ++, o allo sviluppo di livello superiore che Unit consente.
Tim Holt,

8

No, Unity3D non mette in alcun modo in pericolo le abilità C ++. In effetti, conoscere il C ++ è molto più importante per un programmatore di giochi.

Unity3D è uno strumento davvero eccezionale per lo sviluppo di giochi. Mi piace davvero da solo e lo consiglierei per quasi tutte le partite, specialmente per le piccole squadre. Ma Unity3D stesso è scritto in C ++; e devi conoscere il C ++ (e anche un sacco di altre cose di basso livello) per capire davvero come funziona.

Anche se utilizzi Unity3D, solo le competenze C ++ e la comprensione a basso livello dei principi e degli algoritmi coinvolti ti permetterebbero di sfruttarlo al massimo delle loro potenzialità. Questo vale anche per altri motori di gioco.

E per fare davvero un buon lavoro, per spremere ogni ultimo bit di performance dalla tua piattaforma preferita e stipare il maggior numero possibile di effetti e algoritmi allo stato dell'arte, non puoi usare altro che C / C ++. Con pezzi di assemblatore, probabilmente.


Questa è la risposta che stavo aspettando per +1:]
Notabene,

3

Per quanto posso dire, dipende dalla tua piattaforma di destinazione, i giochi AAA e i giochi console (XBOX, Wii, ecc.) Saranno in genere in C ++ per ottenere le massime prestazioni, tuttavia se stai scrivendo un gioco basato su browser Unity è anche frequente Usato.

Tuttavia, per quanto riguarda la tua domanda, penso che abbia semplicemente a che fare con strumenti come Unity che ti offrono un ampio quadro standardizzato su cui lavorare, che in un progetto di sei mesi può fare la differenza tra un prototipo mezzo cotto e un gioco piuttosto elaborato.


3

Sono andato al Master in Computer Graphics and Game Technology dell'Università della Pennsylvania, dove abbiamo realizzato tutti i nostri progetti ai livelli più bassi, con progetti in C ++, OpenGL, CUDA, ecc. I nostri progetti includevano l'animazione basata sulla fisica, l'architettura di animazione dei personaggi e IK, che rappresenta varie forme di curve di Bezier ... sai, davvero roba di base che sfrutta l'esperienza nella programmazione, l'algebra lineare e il calcolo.

Quindi, ho scaricato Unity e ho scoperto che tutto ciò che ho lavorato per creare è stato imbottigliato in questa suite gratuita che chiunque può usare.

Ne sono stato infastidito? Un po ', è vero, ma ho scoperto che avere quella comprensione da scuola mi rende molto più pericoloso quando utilizzo strumenti come Unity. Attualmente lavoro nei giochi, in cui portiamo i giochi dal concept al mercato in meno di un anno, e sono ancora il tipo di riferimento quando si tratta di "quella roba matematica". Il mio consiglio è di esaminare i movimenti; sarai assolutamente prezioso quando entrerai nel settore.


Potresti (teoricamente) ottenere un badge da esso. :)
Ciclope,

Non c'è necroing qui, perché le domande non invecchiano e "muoiono" come nei forum. :) Le risposte in ritardo sono sempre OK.
doppelgreener,

0

Potrei essere in ritardo a rispondere, ma questo aiuterà alcune persone che hanno questa confusione ..

Inizialmente sono un programmatore di c ++, che odiava usare motori di terze parti (ad esempio unità) in quanto, non mi sembra che ci sia molto processo di apprendimento in termini di programmazione a basso livello.

Dopo aver provato l'unità, mi sono imbattuto nelle seguenti cose che è necessario per uno sviluppatore di giochi: qui sto elencando non specificamente l'unità ma elencando i vantaggi di andare in prospettiva ALTO LIVELLO.

  1. Comprendere come progettare ad alto livello è più importante che preoccuparsi delle ottimizzazioni di basso livello.
  2. I motori che hanno il sistema di architettura Entity (architettura basata su componenti) aiuteranno ad imparare come questa architettura sarà utile.
  3. Conoscerai le ultime tecnologie (almeno la terminologia) e sarai almeno aggiornato con il settore della Grafica. Questo è il motivo principale per cui ho scelto di provare l'unità!
  4. Saltare il tempo speso per diversi strumenti di importazione di risorse (ovviamente mi piacerà ancora scrivere i miei importatori 3d in c ++ perché sarà più divertente nel tempo libero)

Sopra sono alcuni dei motivi per scegliere un motore di alto livello. Ma allo stesso tempo, non dovresti smettere di imparare il C ++ come il lang più richiesto e utile per uno sviluppatore di giochi perfetto.

Prima comprendi la visualizzazione ad alto livello e fai alcuni prototipi rapidi con Unity e usa quell'esperienza nella progettazione di un buon gioco in c ++.

Presto tornerò a c ++ poiché avevo acquisito una buona esperienza a un livello superiore con l'unità :)

In bocca al lupo!


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.