Wie kann ich den Spieleditor in die Engine integrieren?

7

Ich versuche herauszufinden, wie ich den Editor (Level, Effekte, Modell usw.) am effektivsten integrieren kann.

Das erste, was ich dachte, wäre, die Spiel-Engine (*) extrem modular zu gestalten. Zum Beispiel habe ich das Beispiel von Spielzuständen genommen. Sie können mehrere Spielzustände haben, die unter anderem alle ihre eigenen Methoden update () und draw () haben. Jede Spielstatusklasse würde von einer Basis-GameState-Klasse erben. Dies ermöglicht einen modulareren und einen nützlichen Ansatz.

Wäre es nun am effizientesten, den Editor zusammen mit der modularen Engine zu implementieren oder zwei verschiedene Designs für das Spiel und den Editor zu erstellen? Ich dachte, ich nehme das Beispiel für den Spielstatus und erweitere es auf Fensterzustände. Es könnte auch für viel mehr Systeme verwendet werden. Gibt es eine bessere Implementierung dieses Designs (Spielstatus) für die Verwendung in anderen in der Engine verwendeten Systemen?

*: Jetzt weiß ich, dass der Begriff Game Engine irgendwie irrelevant ist und in vielen Situationen missbraucht wird. Was ich als "Game Engine" bezeichne, ist die Kombination der Systeme, mit denen das Spiel kurz interagieren muss.

Auch dies ist eher eine Theorie- / Entwurfsfrage als eine Implementierung. Obwohl beide gemischt sind, möchte ich lieber eine allgemeinere Vorstellung davon haben, wie der Editor effizient aufgebaut ist und trotzdem den gleichen Engine-Code wie das Spiel verwendet.

PS Wenn Sie mehr Klarheit oder zusätzliche Informationen benötigen, hinterlassen Sie einfach einen Kommentar.

Daniel
quelle

Antworten:

5

Ich denke, Ihre Frage bezieht sich mehr auf Design, aber normalerweise möchten Sie nichts entwerfen, das nicht implementiert werden kann. Daher wird die Implementierung von Zeit zu Zeit angezeigt.

Was den Editor betrifft, denke ich, dass es davon abhängt, was die Laufzeit-Game-Engine-Bibliothek unterstützen kann. Unterstützt es eine allgemeine Anwendungsarchitektur (z. B. Ereignissystem, Ausnahmebehandlung, GUI usw.) oder konzentriert es sich mehr auf die Ausführung eines bestimmten Spieltyps, für den es entwickelt wurde? Wenn es eine solche Architektur unterstützt, würde man den Editor ähnlich einem Spiel implementieren. Andernfalls könnte der Editor ein eigenständiges Programm sein, das ein etabliertes Framework verwendet.

Vielleicht möchten Sie sich die Game Engine-Architektur von Jason Gregory ansehen. In diesem Buch weist der Autor darauf hin, dass UnrealEd ein Beispiel für einen Editor ist, der mit der von ihm unterstützten Engine erstellt wurde, und dass ein solches Design Vor- und Nachteile hat. (Pro: Alles ist nativ, daher ist es einfach, auf "Spielen" zu klicken und direkt vom Editor ins Spiel zu springen. con: Wenn Ihre Engine nicht stabil ist / sich in der Entwicklung befindet, kann die Verwendung des Editors beeinträchtigt werden.)

Unten sehen Sie ein Beispiel für die Architektur eines Motors aus demselben Buch. Um einen Editor zu integrieren, möchten Sie dem Frontend wahrscheinlich eine generische GUI hinzufügen. Möglicherweise möchten Sie auch ein Anwendungsereignissystem (das ein- und ausgeschaltet werden kann), das sich irgendwo zwischen dem HID und dem Frontend befindet. Sie könnten wahrscheinlich eine anständige Menge an Funktionalität daraus ziehen, aber es könnte eine Editor / Generic Application - Spezifische Subsystem-Blase neben dem Spiel geben, und andere bereits vorhandene Blasen könnten nach Bedarf erweitert werden.

http://www.bennychen.cn/wp-content/uploads/2011/03/RuntimeGameEngineArchitecture.png

Derek E.
quelle
Vielen Dank für einen guten Einblick. Ich werde das Buch auf jeden Fall abholen, da es mehrfach vorgeschlagen wurde.
Daniel
1
Game Engine Architecture ist ein erstaunliches Buch, aber es ist zu dünn. Es geht um Subsysteme, aber nie im Detail. Trotzdem würde ich es jedem empfehlen, der seinen eigenen Motor bauen möchte.
Ritter666
Vielen Dank. Zu verstehen, wie man eine Engine erstellt und wie der Implementierungsprozess ungefähr abläuft, wäre meine erste Aufgabe, da ich mehr Spiele in den Griff bekommen möchte, um wirklich zu verstehen, was ich brauche und was nicht.
Daniel