Welche Vor- und Nachteile hat Unity3D für Spiele? [geschlossen]


64

Wir machen unser Schulprojekt mit Unity3d, da sie Shiva im letzten Jahr verwendet haben (was mir schrecklich erscheint), und ich wollte Ihre Sichtweise für dieses Tool kennen.

Vorteile:

  • Multi-Plattform, ich habe sogar gehört, Google wird es in Chrome implementieren
  • alles was du brauchst ist hier
  • Skriptsprachen machen es zu einer guten Wahl für Leute, die keine Gurus programmieren

Nachteile:

  • Multiplayer?
  • proprietär, Sie sind völlig abhängig von der Einheit und ihrer Grenze und können sie nicht erweitern
  • es ist weniger "ein Spiel von Grund auf neu zu machen"
  • C ++ wäre eine coole Sache gewesen

Ich denke wirklich, dass diese Art von Tool interessant ist, aber lohnt es sich, es in der Schule für ein Projekt zu verwenden, an dem mehr als 3 Programmierer beteiligt sind? Was lernen wir wirklich in Bezug auf die Programmierung, wenn wir diese Art von Tool verwenden (ich bin in Ordnung mit Python und Js, aber ich hasse C #)? Wir hätten stattdessen Ogre verwenden können, auch wenn wir ab Januar direkt x lernen würden ...


Ein weiterer Nachteil wäre, dass Sie mit 3D-Modellierung / -Design vertraut sein müssen, aber ein weiterer Blick auf die Website und dies scheint nicht der Fall zu sein.
Johnny Quest

1
@ Johnny Quest Nur nicht wirklich, wofür es gedacht war, könnte es unangenehm machen, es zu benutzen.
Spooks

7
"C ++ wäre eine coole Sache gewesen" - im Ernst, was? Schreiben in C ++ ist jetzt "cool"? Persönlich hasse ich die Sprache (das ganze Tippen, Python den ganzen Weg: p), aber es ist auf jeden Fall ein großartiges Sprachfeature und bibliothekarisch.
Die kommunistische Ente

1
Unity ist ein erstaunlicher Motor, aber ... Ein paar Nachteile, die Sie beachten sollten: 1) Unity ist eher ein Gedächtnisschwein. Es braucht mehr Gedächtnis, als du denkst; wahrscheinlich weil Dinge wie Texturen zwischengespeichert wurden. Dies kann Probleme beim Debuggen und sogar OOM-Fehler auf Mobilgeräten verursachen. 2) Leistungsprobleme können schwer zu lokalisieren, zu beheben und zu beheben sein, da es sich um eine Black Box handelt (kein Quellcode). Untersuchen Sie Ihre Shader genau und beobachten Sie, wie Sie die Szene verwalten.
milkplus

2
@milkplus: Deshalb denke ich, dass Einheit nicht das ist, womit Schüler lernen sollten. Beispiel: Ich bin in der Lage, den Schülern das Programmieren beizubringen, indem ich ihnen zuerst Python beibringe, aber zu dem einen oder anderen Zeitpunkt muss man ihnen beibringen, wie Levels funktionieren, sogar die Grundlagen. Leute sollten ein Werkzeug benutzen, wenn sie alles über die Funktionsweise dieses Werkzeugs wissen. Wenn nicht, wartet eine Katastrophe auf Sie. Sie können Knuths Zitat nicht immer mit etwas rechtfertigen, das so komplex ist wie die Einheit.
jokoon

Antworten:


66

Das wichtigste "Pro" von Uinty3D ist, dass es schnell verrückt ist. Ich spreche hier nicht von Leistung, sondern von Entwicklungsgeschwindigkeit. Du hast:

  • Einheitliche Asset-Pipeline. Kein Zeitaufwand für das Ressourcensubsystem, keine fehlerhaften Importroutinen zum Schreiben und Reparieren: Einfach eine Datei in einen Ordner ablegen, und es funktioniert.
  • Integrierter Leveleditor. Sie müssen keine Zeit für Level-Tools aufwenden. Gehen Sie einfach direkt zum Geschäft.
  • Hervorragende Unterstützung für Optimierungen und Fehlerbehebung: Alle Ihre Gameplay-Variablen werden beim Spielen richtig angezeigt und können auch im laufenden Betrieb geändert werden - und das alles, ohne eine einzige Codezeile zu schreiben. Unterbrechen Sie das Spiel jederzeit oder gehen Sie Code für Code einzeln durch.
  • Umfangreiche Bibliothek an vorgefertigten Bauteilen. Rendering, Sound, Physik, Steuerung - eine Menge Code für "Boilerplate" ist bereits geschrieben.
  • Mono als Script-Host. Während man über die Vorzüge von C # als Sprache streiten kann, bietet Monos Basisklassenbibliothek eine Fülle von Funktionen. Sammlungen, E / A, Multithreading und wahnsinnig ausdrucksstarkes LINQ beschleunigen die Entwicklung erheblich.

Außerdem ist Unity3d auf mehreren Plattformen sehr gut. Natürlich können Sie kein Windows-EXE-Spiel erstellen und es dann auf magische Weise auf dem iPhone "einfach funktionieren" lassen. aber Unity kommt dem ziemlich nahe. Was benötigt wird, ist "Tweaken" mehr als "Portieren".

In manchen Fällen ist Unity3D natürlich nicht ideal. In Unity integrierter Netzwerk-Multiplayer ist für einige LAN-Peer-to-Peer-Spiele in Ordnung, aber für alles, was einen zentralen Server erfordert, müssen Sie den gesamten Netzwerkcode von Grund auf neu schreiben. Das GUI-System von Unity ist recht schrullig und langsam, so dass es ein Problem ist, komplexe GUIs im Spiel zu erstellen. Alle anderen Spiele-GUI-Systeme, die ich gesehen habe, sind jedoch auch schmerzhaft, so dass Unitys eines insgesamt nicht so schlecht ist.

Und natürlich ist Unity3D etwas weniger flexibel als "Game Engines" wie OGRE, die nur eine Bibliothek / einen Quellcode anbieten. Die Leistung ist nicht gerade erstklassig, und da Sie nur über eine Skriptsandbox verfügen, können Sie einige clevere Low-Level-Hacks nicht verwenden, um sie zu verbessern. Wenn zum Beispiel der in Unity integrierte Tree-Renderer Sie aus irgendeinem Grund nicht zufrieden stellt, können Sie keinen eigenen erstellen (Sie könnten es auch, aber er würde Skripte durcharbeiten und ist höchstwahrscheinlich zu langsam und zu umständlich ). Trotzdem ist es mit Unity möglich, so gut wie alles zu tun, solange es Ihnen nichts ausmacht, ein bisschen Leistung zu verlieren.

Die größte Schwäche von Unity3D ist jedoch die Quellcodeverwaltung. Wie bereits erwähnt, kostet Unitys eigener Asset Server einen hübschen Cent. Und es ist wirklich sehr, sehr schwer. Es hat nicht einmal Verzweigungen. Während Unity3D theoretisch SCM-Systeme von Drittanbietern unterstützt, ist ihre Verwendung ebenfalls gefährlich. Ich habe gesehen, wie sich die Importeinstellungen nach dem Festschreiben von SVN "auf magische Weise" geändert haben oder alle Objektparameter nach der Verwendung von Perforce verschwunden sind. All dies kann umgangen werden, aber Unity3D + Quellcodeverwaltung = Schmerz.

Also, um deine Frage tatsächlich zu beantworten. Ich glaube, Unity3D ist eine der besten, wenn nicht sogar die beste Wahl für eine Spiel-Engine für ein "kleines" Spiel. Besonders im Prototypenstadium.

Das heißt, wenn wir über ein Bildungsprojekt sprechen, empfehle ich dagegen. Um zu lernen, wie Spiele funktionieren, ist es besser, auf einem möglichst niedrigen Level zu schreiben. Game Engines sind ein großartiges Werkzeug. Aber um maximale Gewinne zu erzielen, muss man verstehen, wie sie funktionieren und warum sie so funktionieren. Und der beste Weg, dies zu lernen, ist, eine eigene Spiel-Engine zu schreiben - auch wenn es sich am Ende als beschissen herausstellt.


3
Ich zitiere "Unified Asset Pipeline. Sie müssen überhaupt keine Zeit für das Ressourcensubsystem aufwenden, keine fehlerhaften Importroutinen zum Schreiben und Reparieren: Legen Sie einfach eine Datei in einem Ordner ab, und es funktioniert."
5.

7
und "Die größte" Schwäche von Unity3D ist jedoch die Quellcodeverwaltung. "
nkint

2
und "Das heißt, wenn wir über ein Bildungsprojekt sprechen, empfehle ich dagegen."
nkint

Über dein "Baumgen" -Problem. Ich denke, speziell in C # können Sie einen C ++ - Baum schreiben, ihn in eine .dll-Datei einfügen und ihn als verwaltetes C ++ behandeln. So können Sie theoretisch auf Ihre eigenen "Engine-Fixes" zugreifen.
Daemonfire300

Ich gebe zu, dass das Unity GUI 2.0-System nichts anderes ist als das "Rendern eines Rect mit Text" -System, aber es ist sehr, sehr einfach erweiterbar. Schauen Sie sich @AffinityUI oder andere Unity-UI-Projekte an, die sehr leicht und quelloffen sind und das UI-System wert sind.
Daemonfire300

28

Ich beginne damit, Ihre Liste zu kommentieren:

  • Scripting ist nicht nur für Nicht-Programmierer von Vorteil. Ein (guter) Programmierer zu sein ist mehr als nur eine Sprache zu kennen, es ist zu wissen, wie man Probleme dekonstruiert und auf eine bestimmte Weise denkt. Skriptsprachen können es einem Programmierer ermöglichen, diese Fähigkeiten des kritischen Denkens höherer Ordnung zu nutzen, um in kürzerer Zeit leistungsfähigere und interessantere Ergebnisse zu erzielen, als er oder sie möglicherweise gleichwertige Ergebnisse erzielen muss kommt mir in den Sinn) ins Bild zu zwingen.

  • Multiplayer-Unterstützung (oder ein Mangel daran) ist nur dann ein Problem, wenn Ihr Projekt dies benötigt.

  • Ich sehe nicht, wie "proprietär" ein Betrug ist. Wenn es sich um ein Schulprojekt handelt, möchten Sie wahrscheinlich keine Zeit damit verbringen, sich mit der Quelle des verwendeten Frameworks oder mit etwas anderem zu befassen. Außerdem ist DirectX auch proprietär.

  • Es ist absolut nichts Falsches daran, übergeordnete Frameworks oder Tools wie Unity zu verwenden. "Ein Spiel von Grund auf neu machen" ist ein Misserfolg - was genau sehen Sie unter "von Grund auf neu"? Sie werden weiterhin die Grafik-API eines anderen Benutzers verwenden. Die Laufzeit eines anderen Benutzers (selbst C benötigt eine Laufzeitbibliothek). "Ein Spiel machen" ist das, was Respekt verdient, nicht "ein Spiel ohne die Verwendung nützlicher Werkzeuge zu machen".

  • C ++ ist etwas subjektiv. Die Sprache wird sehr oft von Fachleuten in der Branche verwendet, aber wahrscheinlich nicht aus den Gründen, die Sie denken würden. Als Sprache zeigt sie allmählich ihr Alter und kann im Vergleich zu moderneren Optionen äußerst umständlich sein. In jedem Fall sind Sprachen nur Werkzeuge, und ein guter Programmierer sollte relativ leicht in der Lage sein, neue zu finden.

Der große Vorteil der Verwendung von Unity für Ihr Schulprojekt besteht darin, dass es sich um ein Framework auf hohem Niveau handelt, in dem bereits eine Menge Infrastrukturarbeit für Sie vorhanden ist. Auf diese Weise können Sie sich auf Ihr Spiel konzentrieren und nicht auf den Aufbau eines Fundaments. Vermutlich haben Sie ein relativ begrenztes Fenster, in dem Sie dieses Spiel erstellen können. Je mehr Sie die vorhandenen Tools nutzen können, desto mehr Zeit müssen Sie für die Erstellung der für Ihr Spiel spezifischen Logik oder Assets aufwenden, damit Ihr Spiel aussieht und sich anfühlt vollständiger - es gibt eine Lernkurve für Unity, aber Ihnen steht viel schneller viel mehr zur Verfügung.

Ein Nachteil besteht darin, dass Sie möglicherweise Zeit für das Erlernen eines bestimmten Tools aufwenden müssen, das möglicherweise nicht übertragbares Wissen enthält , insbesondere wenn Sie sich dafür entscheiden, dass der Arbeitsablauf und die Umgebung von Unity nicht für Sie geeignet sind und Sie es nie wieder verwenden möchten . Unity hat auch nicht den offensichtlichsten 2D- Workflow - es konzentriert sich sehr auf 3D-Spiele, die den gesamten Aufwand an Kunstobjekten mit sich bringen. Aber ich denke, dass Unity für ein Schulprojekt, wie Sie es beschreiben, eine ziemlich gute Wahl ist.


13
Ich zitiere "Making a Game" ist das, was Respekt verdient, nicht "Making a Game, ohne irgendwelche nützlichen Werkzeuge zu verwenden."
nkint

2
"Es ist absolut nichts Falsches daran, übergeordnete Frameworks oder Tools wie Unity zu verwenden." Ein Spiel von Grund auf neu zu erstellen "ist ein Misserfolg. Was genau halten Sie von" von Grund auf neu "? so niedriges Niveau wie möglich gehen , zum Beispiel daran , dass Menschen , die neuen Technologien schaffen Uncharted 2 verwendete auch ein Haus modifizierte Grafik - API.
concept3d

1
Jeder Entwickler, der auf dem neuesten Stand der Computergrafik sein möchte, muss sich auf das unterste Level konzentrieren und mit seinem Spiel seine eigene Engine entwickeln. aber das ist ungefähr 1% aller Spieleentwickler, wie es scheint. Wenn ein Unternehmen ein Spiel entwickelt, das so fortgeschritten ist wie Uncharted 1, könnte es zum Zeitpunkt der Veröffentlichung von Uncharted 3 wahrscheinlich ein vorhandenes Framework verwenden (nicht unbedingt Unity). Die Frage ist: Erschaffst du Uncharted 4?
Katana314

9

Ein Hauptproblem bei Unity ist die Quellcodeverwaltung. Wenn Sie nicht in einem Team arbeiten, wird dies (wohl) nicht so wichtig sein, aber das wird höchstwahrscheinlich nicht der Fall sein.

Sie können Unity Asset Server verwenden, hierfür sind jedoch 1) Unity Pro (1500 USD) und 2) eine Asset Server-Lizenz pro Arbeitsplatz (500 USD) erforderlich. Ich gehe davon aus, dass Sie eine Art Bildungsrabatt erhalten können, der jedoch nicht kostenlos ist.

Alternativ können Sie auch SVN mit Unity verwenden. Zur korrekten Unterstützung benötigen Sie weiterhin Unity Pro.

Sie können nicht einfach eine Nicht-Pro-Version von Unity in SVN einchecken und erwarten, dass sie fehlerfrei funktioniert. Ihr Mechanismus zum Binden von GUIDs an Assets usw. ist nicht genau SCM-sicher.


Die Multiplayer-Funktionalität ist ziemlich anständig, obwohl ich ehrlich gesagt noch kein Spiel mitgeliefert habe. Theoretisch hängen Sie einfach Netzwerkansichten an die Dinge an und teilen mit, was Sie serialisieren möchten, um die Replikation ordnungsgemäß einzurichten. Von dort aus ist es einige UI-Arbeit, sich mit anderen Peers zu verbinden und einzurichten. Es ist jedoch meistens Peer-to-Peer. Sie sind möglicherweise in der Lage, die Client / Server-Programmierung im Headless-Modus auszuführen, aber ich habe mich nicht damit angelegt. Aber es ist ziemlich einfach und schnell, Person A dazu zu bringen, auf dem Bildschirm von Person B herumzulaufen.

Auch C # ist für mich positiv . LINQ ist sehr ausdrucksstark. Es verfügt über eine ordnungsgemäße Ausnahmebehandlung und Speicherbereinigung. Es hat viel modernere Paradigmen wie Delegates, Lambdas, Interfaces und eine bessere generische Unterstützung als C ++. ( Edit : das ist offensichtlich umstritten. Mein Punkt ist, dass C # kaum eine schlechte Sprache ist. Ich möchte nicht in eine lange Debatte über die Vor- und Nachteile der Sprache gegenüber C ++ geraten.)

Der größte Vorteil von Unity ist wahrscheinlich die Kunstpipeline. Sie können eine PSD- oder Max-Datei (vorausgesetzt, Sie haben 3ds max installiert) in den Ordner aufnehmen und diese wird importiert.


3
@DeadMG, ja, eigentlich sehr gut. Ja, ich kenne mich mit Boost, Template-Metaprogrammierung usw. aus. Aber ich finde, dass C # eine modernere Sprache ist.
Tetrad

3
@DeadMG Ich denke, der Punkt ist, dass C # für viele Anwendungsfälle, in denen C ++ zu wünschen übrig lässt, extrem flüssig ist. Nicht, dass C ++ diese Dinge nicht kann.
Nate

3
Die einzige Sache auf seiner Liste, mit der ich nicht einverstanden sein könnte, war "bessere generische Unterstützung als C ++".
Kylotan

1
@Kylotan "for (vector <vector <int >> :: iterator iterator = scores.begin (); iterator! = Scores.end (); iterator ++) {" VS "foreach (var score set in scores)" .. Ja, ich bin mit C #.
Katana314

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

6

Update: Unity bietet jetzt all diese Funktionen, auch in der kostenlosen Version. Bitte ignorieren Sie die Antwort unten.


Beachten Sie Folgendes: Wenn Sie die kostenlose Version von Unity3D verwenden, können Sie nicht mehrere Effekte verwenden, darunter Post-Processing-Shader (wie Bloom) und vor allem dynamische Schatten. Diese haben natürlich keine großen Auswirkungen auf den Workflow des Projekts, schränken jedoch ein, was mit der Engine kostenlos erreicht werden kann.


1
Dies ist nicht mehr korrekt und sollte aktualisiert oder entfernt werden.
MichaelHouse

@ Byte56 Danke. In Zukunft sollten Sie in der Lage sein, alte Beiträge selbst zu aktualisieren, ohne einen Kommentar hinterlassen zu müssen.
Michael Younkin

Ich habe auf eine Markierung geantwortet, um diese Antwort zu entfernen, und ich habe nicht vorgeschlagen, dass Sie sie aktualisieren, um zu sagen, dass sie nicht mehr korrekt ist. Ich schlug vor, dass Sie es aktualisieren, um genau zu sein, oder es entfernen. Diese Antwort beantwortet derzeit nicht die Vor- und Nachteile von Unity 3D als Wahl. Ich bin sicher, Sie können einen Weg finden, um es zu retten. (Sie können es so aktualisieren, dass es alle Funktionen enthält, die Unity jetzt bietet, und diejenigen, die sie nicht kostenlos anbieten.)
MichaelHouse

3

Die Antwort von Nevermind deckt die Dinge ziemlich gründlich ab, aber nur um auf die Seite der Quellcodeverwaltung einzugehen, ist es eigentlich nicht so schrecklich, wenn man erst einmal lernt, auf eine Handvoll Fallstricke zu achten:

  • Zunächst einmal, ja, Asset Server ist teuer und für alle, außer für den Basisgebrauch, ziemlich schrecklich. Der Hauptvorteil liegt in der Integration in Unity. Dies ist zwar für die Benutzerfreundlichkeit und für einfachere Projekte von Nutzen, für größere Projekte (normalerweise für Projekte mit AS-Budget) jedoch nicht flexibel genug.
  • Beim Übergang zur externen Versionskontrolle ist es wichtig zu wissen, dass Metadateien wie jedes andere Asset behandelt und in der Versionskontrolle immer hinzugefügt / aktualisiert werden müssen. Wenn Sie dies nicht tun, ist es wahrscheinlich, was in Neverminds Szenario des Verschwindens der Einstellungen passiert ist.
  • Wenn Sie mit einem beliebigen Versionskontrollsystem in Unity (einschließlich Asset Server) arbeiten, ist die Teamkommunikation bei der Arbeit mit binären Assets von entscheidender Bedeutung, um zu vermeiden, dass die Arbeit der anderen Benutzer beeinträchtigt wird.

Falls Sie weitere Informationen zu diesen Punkten benötigen, habe ich vor einiger Zeit Informationen zur Verwendung von git mit Unity veröffentlicht, die auf meinen Erfahrungen mit einigen relativ großen Unity-Projekten basieren: http://goo.gl/ivJVR


Ok, wow, entschuldige die Nekropost. Mir ist gerade aufgefallen, dass dies 2011 gefragt (und beantwortet) wurde! Ich habe es hinzugefügt, weil es diese Woche im Newsletter von stackexchange gamedev aufgetaucht ist .
FlintZA

Kein "Necro" auf SE. Ein typisches Beispiel ist mein Kommentar. : P
Cypher

2

Tatsächlich. Multiplayer wird unterstützt. Es ist einfach eine Frage der Auswahl eines Servers, auf dem Sie Ihr Spiel ausführen möchten.

Das aktuellste auf dem Markt ist "SmartFox Server". Sie bieten einige verschiedene Pakete an, die alle (bis zu einem gewissen Grad) kostenlos sind. Es ist nur kostenlos, wenn Sie vorhaben, eine bestimmte Anzahl von Spielern zu haben, da jedes Paket eine bestimmte Anzahl von Spielern "kostenlos" zulässt.

Wenn Sie sich für ein Upgrade entscheiden, ist der Preis für einen Indie-Entwickler ziemlich hoch. Also ... Wenn Sie auf lange Sicht viele Spieler auf Ihrem Server haben, müssen Sie für Ihr Spiel eine Gebühr erheben, anstatt es auf Websites wie Download.com als kostenloses Vollspiel hochzuladen. Dies mag für einige kein Problem sein, aber die meisten von uns können sich 2.500 USD aus eigener Tasche für einen Server nicht leisten.

Zum Beispiel - SmartFox Pro erlaubt 20 Spieler kostenlos. Wenn Sie ein Upgrade durchführen möchten, kostet es 500 Euro, was in den USA etwas mehr ist, etwa 600-700 Euro, und das ermöglicht 100 Verbindungen.

Das nächste Upgrade ist für eine maximale Anzahl von 500 Spielern vorgesehen und kostet 1000 Euro, aber ... Sie müssen die 1000 nicht bezahlen, sondern zahlen die Differenz.

Sie müssen also nur 500 Euro mehr bezahlen als die gesamten 1000. Die letzten Upgrades unterstützen eine unbegrenzte Anzahl von Verbindungen für 2.000 Euro. Das sind fast 3.000 US-Dollar.

Wenn Sie also von den 500 Verbindungen upgraden, zahlen Sie 1000 Euro, wenn Sie von 100 Verbindungen upgraden, zahlen Sie 1.5000 Euro und natürlich 2.000 Euro für ein kostenloses Upgrade.

Außerdem ist dieser Server mit Unity sehr einfach einzurichten, und auf Youtube gibt es zahlreiche Tutorial-Videos, die zeigen, wie das genau geht.


Ich habe seit 2005 ausgiebig mit SmartFox Server gearbeitet und es rockt wirklich sehr. Sehr stabil und ausgereift.
PippoApps.com
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.