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
- ist ein Stück Code / Software
- Es soll in mehreren Projekten wiederverwendet werden (Sie können auch eine Game-Engine für nur ein Spiel schreiben).
- Für die Wiederverwendung trennt die Game Engine den wiederverwendbaren Teil vom spielspezifischen Teil
- Um wiederverwendbar zu sein (je nachdem, wie es wiederverwendet werden soll), gibt es verschiedene Varianten, z. B. eine datengesteuerte Engine, die externe Daten lädt
Eine Engine kann aus mehreren anderen Engines bestehen (da heutzutage alles als Engine bezeichnet wird). Eine Game-Engine kann enthalten
- eine Render-Engine, die das Rendern ausführt
- eine Physik-Engine, die die Physik ausführt (es ist eine Physik-Engine, keine Spiel-Engine)
- eine KI-Engine, die das KI-Zeug verwaltet (es ist eine KI-Engine und keine Spiel-Engine)
- eine Netzwerk-Engine (z. B. RakNet), die das Netzwerk-Zeug erledigt (es ist eine Netzwerk-Engine, keine Spiel-Engine)
- eine Audio-Engine, die das Audio-Zeug macht (es ist eine Audio-Engine und keine Spiel-Engine)
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.