Was ist der Unterschied zwischen einem Game-Framework (z. B. XNA mit C #, SDL für c ++) und einer Game-Engine?
Verwenden Game Frameworks Engines? Umfasst eine Game-Engine Sub-Engines wie Physik-Engines, Partikel-Engines usw.? Sollten sie zusammen verwendet werden oder schließen sie sich gegenseitig aus?
Ich nehme an, es gibt separate Engines für 2D und 3D?
terminology
Calum Murray
quelle
quelle
Antworten:
Es gibt wirklich keine strengen Definitionen für "Engine" oder "Framework".
Im Allgemeinen wird davon ausgegangen, dass eine Engine "mehr leistet" oder über mehr Tools und zugehörige Unterstützung verfügt als ein Framework, bei dem es sich häufig nur um eine lose Sammlung zugehöriger Funktionen handelt, die über eine einheitliche API verfügbar gemacht werden.
Zu diesem Zweck können Dinge, die behaupten, Engines zu sein, Dinge verwenden, die behaupten, Frameworks zu sein, um Funktionalität zu erreichen, aber das muss nicht immer der Fall sein. Ebenso kann ein Ding, das behauptet, eine Spiel-Engine zu sein, behaupten, dass seine Bestandteile (die Physik und das Rendering usw.) mit einer Physik-Engine oder einem Physik-Framework implementiert sind. Die Arten von Technologie, auf die sich beide Begriffe beziehen, können austauschbar verwendet werden oder nicht.
Es kann "Engines" oder "Frameworks" für fast alles geben - Physik, Sound und ja, sogar 2D- oder 3D-Grafiken.
Es ist wirklich nur ein terminologisches Problem, und es spielt im Allgemeinen keine große Rolle. Aus der Sicht der Funktionalität, einer Perspektive, die sich auf die Entwicklung Ihres Spiels konzentriert, sollte es darauf ankommen, ob die betreffende Technologie das liefert, was Sie für die Entwicklung Ihres Spiels benötigen. Ob es sich selbst als Engine oder Framework bezeichnet, spielt dabei keine Rolle.
quelle
Einfache Definition, die ich verwende: Sie können eine Engine auf einem Framework erstellen, aber Sie würden niemals ein Framework auf einem Engine erstellen. Eines ist das Skelett, das die Architektur und den Programmfluss bestimmt, das andere ist der Muskel, der die Arbeit erledigt.
Als konkretes Beispiel ist Artemis ein hübsches kleines Framework zum Erstellen von Komponentensystemen, aber Sie würden es nie als Engine bezeichnen. Sie können Artemis-Systeme und Standardkomponenten erstellen, um daraus eine Engine zu erstellen.
quelle
Ein Framework ist eine Sammlung von (normalerweise) Bibliotheken und Hilfsprogrammen auf niedrigerer Ebene, mit denen Sie alles tun können, was Sie wollen (Grafiken, Sounds usw.). Ein Framework hat nichts mit Spielen zu tun, es sei denn, es ist in der Regel für die in Spielen üblichen Aufgaben optimiert oder ausgelegt.
Beispiel: Mit einer Engine können Sie eine Liste von Entitäten mit einer Position auf der Karte erstellen. Mit einem Framework können Sie ein 3D-Objekt an einer bestimmten Position rendern.
Sie verbinden sie also, indem Sie jeder Entität ein 3D-Objekt zuweisen und sie bei Bedarf rendern.
Und ta-da, du hast ein Spiel.
quelle
Für eine wirklich detaillierte Erklärung empfehle ich, die einzige Bibel- Game-Engine-Architektur von Jason Gregory zu lesen . Ich denke, es ist das vollständigste Werk zu diesem Thema, seit es veröffentlicht wurde. Es behandelt nicht nur den C ++ - Teil, sondern auch die Theorie / Architektur, die dahinter steckt, und ist für jeden Game-Engine-Programmierer wichtig. Es ist ein guter Ausgangspunkt, unabhängig von der Sprache. Um einen Überblick zu bekommen, worüber wir sprechen, ist dieses Bild aus dem Buch
Lassen Sie mich versuchen, die Frage zu beantworten.
Was auch immer Sie schreiben, es wird Code sein :-) Schreiben Sie nach Jahren der Erfahrung, was Sie brauchen und wie Sie es brauchen, oder verwenden Sie, was Ihnen das bietet, was Sie brauchen.
Die Begriffe Engine und Framework stammen zusammen mit anderen Begriffen aus der Softwarearchitektur. Beginnen wir also mit den Grundbegriffen und gehen wir nach oben.
Bibliothek
Typische Beispiele: Eine Mathematikbibliothek mit allen grundlegenden Typen und Funktionen für mathematische Berechnungen (Vektor, Matrix, ...) oder eine Bildbibliothek (JPEG oder PNG) mit Funktionen zum Schreiben von JPEG- oder PNG-Bildern
In Unity 3D Math ist eine mathematische Bibliothek.
Theorie: Eine Bibliothek bietet spezielle Funktionen rund um ein Thema (z. B. Mathematik) UND wird vom Programmierer bei Bedarf aufgerufen .
Vorschau: Es kann Bibliotheken geben, die Frameworks enthalten, auch bekannt als Framework-Bibliothek.
Rahmen
Theorie: Ein Framework führt eine Umkehrung der Kontrolle ein . Dies bedeutet, dass der Entwickler die Framework-Methoden meist nicht aufruft, das Framework jedoch den Code des Entwicklers aufruft. Ausnahmen sind, wenn Sie die Framework-Bibliothek in Ihren Code integrieren und das Framework starten müssen. Eine Framework-Bibliothek bietet alle Methoden und Funktionen sowie Schnittstellen für ein Framework mit dedizierter Verwendung. Frameworks können sich also in einer Bibliothek befinden.
Typisches Beispiel: Unity 3D MonoBehaviour bietet Methoden wie Awake, Start, OnUpdate. Der Entwickler implementiert diese Methoden und dann werden diese Methoden vom Framework (Game Object Management) aufgerufen (dies ist die Umkehrung der Kontrolle) . Dasselbe gilt für die Methoden OnCollisionEnter, OnCollisionExit. Sie sind im selben Monobehaviour, aber ich wette, sie werden vom Physik-Framework genannt.
Eine Vorschau: Engine, Runtime, Editor, SDK
Da der Begriff Motor immer etwas vage war und immer noch eine Vorschauerklärung gibt (und mit der technologischen Weiterentwicklung nicht besser wird).
Der Begriff Engine wird für mehrere Dinge verwendet und es kann nicht eindeutig gesagt werden, welche richtig ist. Als ich 2004 zum ersten Mal mit dem Schreiben von Game Engines in Berührung kam, war es auch vage. Sie hatten eine Spiel-Engine im Sinne eines Codes, der vordefinierte Daten lädt und Sie das Spiel spielen lässt. Da vordefinierte Daten geladen werden, wurden sie als datengesteuerte Engines bezeichnet. Sie kompilieren sie einmal und die externen Daten könnten verschiedene Spiele gewesen sein, ohne sie neu zu kompilieren. Irgendwann war das wie eine Laufzeit.
Der Editor ist klar. Hier können Sie die vordefinierten Daten definieren, die von der Engine / Laufzeit geladen werden.
Eine Engine mit einem Editor hieß SDK (zB Hammer SDK).
Dann gab / gibt es dedizierte Motoren. Eine Phyiscs-Engine, eine Rendering-Engine, eine Sound-Engine, eine GameObject-Management-Engine, eine Netzwerk-Engine, ...
Meiner persönlichen Meinung nach handelt es sich hierbei nicht um Engines (insbesondere ist eine Render-Engine KEINE Game-Engine, da sie nur Rendering ausführt). Wenn ich die Spiel-Engine google, enthalten die Ergebnisse 90% reine Render-Engines, die keine Spiel-Engines sind. Ich würde sie alle Bibliotheken nennen, aber da sie vordefinierte Daten laden können, stimmen sie mit dem Begriff datengesteuerte Engine überein.
Noch eine kurze Bemerkung, bevor wir ins Detail gehen: Ich habe erfolgreich einen Master-Abschluss in Informatik gemacht. Meine Masterarbeit beschäftigte sich mit dem Thema "Wie man den Kern einer Game Engine entwickelt". Das heißt, der Teil des Codes, der alle anderen Engines zusammenhält, erledigt die Verwaltung der Spielobjekte, die Spielschleife usw.
Ich habe meine Masterarbeit als (kurzes) Buch veröffentlicht. Der einzige Kommentar eines Käufers / Lesers zu Amazon ist (nach einigen Jahren): Es handelt sich nicht um eine Spiel-Engine. Nach meinem erfolgreichen Abschluss habe ich meine Diplomarbeit gegen drei erfahrene Programmierer verteidigt (zwei davon für Spiele und interaktive Anwendungen). Ich glaube, ich habe eine Game-Engine geschrieben.
Editor
Einfach: Mit dieser Option können Sie die Daten in dem Format definieren, in dem sie für die anderen Teile erforderlich sind, und müssen diese Dateien nicht mehr manuell oder mithilfe externer Tools erstellen.
Dies ist die Aufgabe des Unity 3D-Editors.
Laufzeit
Dieser Begriff wird häufig gleichermaßen für Motoren verwendet (was richtig oder falsch sein kann).
Die Laufzeit führt die generierten Daten aus und tut, was sie mit den Daten zu tun haben. ZB zeigen Sie das Spiel und lassen Sie das Spiel spielen. Es werden keine Daten erstellt (außer möglicherweise Spiele speichern), sodass Sie das Spiel selbst nicht ändern können.
Der Unity Web Player ist / war eine Laufzeitumgebung, mit der Sie Unity-Spiele in einem Webbrowser spielen können.
Sie können mehrere verschiedene Spiele mit derselben Laufzeit laden und ausführen.
Bei der Unity 3D-Skript-API gibt es eine Trennung zwischen den Funktionen, die im Spiel funktionieren, und den Funktionen, die nur im Editor funktionieren.
SDK
Dieser Begriff wird oft auch als Framework bezeichnet .
Damals bestand ein SDK aus einem Paket von Tools wie einem Editor, IDE (Integrated Developer Environment) für Programmierer, Exporteuren für Datenformate und der Laufzeit / Engine.
Ein SDK / Framework bietet Ihnen also einen vordefinierten Workflow und Dienstprogramme und zeigt Ihnen eine (gut gestaltete) Möglichkeit, wie Sie (leicht) ein Spiel erstellen können.
Grundsätzlich wäre die Unity 3D-Engine falsch, da sie eher in die SDK-Richtung passen würde. Aber da Einheit noch mehr ist, wird ein neues Wort / eine neue Definition benötigt, um dem zu entsprechen, was es ist.
Wie auch immer, um den anderen Begriff einzuführen, ein SDK / Framework bietet Ihnen eine vordefinierte Spieleentwicklungs-Pipeline (nicht nur eine Asset-Pipeline, sondern möglicherweise, wie Unity, eine Pipeline für Assets, Logik, Builds, Bereitstellungen usw.).
Motor
Sarkasmus bei Wird für alles verwendet, da jeder cool sein möchte, indem er nicht nur eine Bibliothek, ein Framework oder ein Spiel, sondern auch eine vollständige Engine schreibt. Sarkasmus aus
Lass es uns auslösen:
Ein Motor
Eine Engine kann aus mehreren anderen Engines bestehen (da heutzutage alles als Engine bezeichnet wird). Eine Game-Engine kann enthalten
Ein Beispiel für eine Anwendung, die auf einer Core-Engine basiert und ein Plug-in-basiertes Framework bereitstellt, mit dem alles in einem komponentenbasierten Spielobjekt-Verwaltungsmodell zusammengeführt werden kann. Jede Subengine (Audio rendern) ist ein Modul, das der Game Engine als Plug-In hinzugefügt wird. Jede Komponente kann Teil einer Subengine / eines Moduls sein. Und das (komponentenbasierte) Spielobjektmanagement ist das Bindeglied zwischen den einzelnen Modulen.
Die nächste Definition für Game Engine
Eine Game Engine ist der Teil des Quellcodes Ihres Spiels, der alle Funktionen bietet, die für die Wiederverwendung in mehreren Spielen vorgesehen sind, und mit denen Sie Ihr Spiel codieren und ausführen können. Daher werden alle anderen Teile des Codes (Rendering, Audio, Physik, Verwaltung von Spielobjekten, Vernetzung) zusammengeführt, die entweder Bibliotheken, Frameworks oder dedizierte Engines (Rendering, Physik, ...) sind.
Die Game Engine ist das Chaos in der Mitte.
quelle
Wie @Josh bereits sagte, gibt es keine strenge Definition von Framework oder Engine, aber im konzeptionellen Sinne sind beide Tools sehr unterschiedlich.
Ein Framework enthält eine grundlegende API-Funktion, mit der der Benutzer besser mit der Plattform oder den Funktionen interagieren kann, ohne sich (im Allgemeinen) um Leistung, Kompatibilität usw. kümmern zu müssen. In den Beispielen, die Sie angegeben haben, ist SDL ein Framework, das es gibt Sie können sich über die Plattform hinwegsetzen und Ihre Software hinter dieser Ebene erstellen, ohne sich um Fensterverwaltung, betriebssystemspezifische Dinge usw. kümmern zu müssen. Wenn Sie eine vollständige Software erstellen möchten, benötigen Sie verschiedene Frameworks, z. B. SDL, um die Medien zu verwalten und Plattformmaterial, Box2D zum Verwalten der Physik usw.
Eine Engine ist anders. In diesem Fall liefert das Tool alles, was für die Entwicklung benötigt wird. Eine Physik-Engine bietet Ihnen alles, was Sie zum Verwalten der Physik benötigen, und liefert eine benutzerfreundliche API. Wenn Sie also eine Physiksimulation erstellen möchten, müssen Sie Benötigt keine andere Bibliothek von Drittanbietern. Engines sind nicht mehr als eine Sammlung von Frameworks, anderen Engines, Interfaces, Snippets und allgemeinem Code, die alles bereitstellen, was für die Fertigstellung des Projekts erforderlich ist, ohne dass andere Dritte erforderlich sind oder sich um Dinge auf niedrigerer Ebene kümmern müssen.
quelle