Ich habe von datengetriebenem Design gehört und eine Weile darüber geforscht. Daher habe ich mehrere Artikel gelesen, um die Konzepte zu erhalten.
Einer der Artikel ist Data Driven Design von Kyle Wilson. Wie er beschrieben hat, scheint es mir, dass der Anwendungscode (dh der Code zum Steuern von Ressourcen wie Speicher, Netzwerk ...) und der Spiellogikcode getrennt und der Spiellogikcode von externen Datenquellen gesteuert werden sollten. An diesem Punkt kann ich mir vorstellen, dass der Entwickler eine Art Spieleditor schreibt, der externe Daten über Objekte im Spiel akzeptiert (wie z. B. Charakterinformationen, Waffeninformationen, Karteninformationen ...). Das Szenariodesign wird mit Hilfe einer benutzerdefinierten Sprache / eines benutzerdefinierten Tools erstellt, die / das vom Programmierer geschrieben wurde, damit der Spieleentwickler eine Interaktion zwischen Objekten im Spiel erstellen kann. Der Spieleentwickler verwendet entweder eine vorhandene / benutzerdefinierte Skriptsprache, um ein Skript für das Spiel zu schreiben, oder ein Drag & Drop-Tool, um eine Spielwelt zu erstellen. Ein Beispiel für einen Tool-Ansatz, den ich mir vorstellen kann, ist der World Editor, der normalerweise zusammen mit den Spielen von Bliizard geliefert wird.
Ein anderer Artikel ist jedoch gegen die Verwendung von datengesteuertem Design, The Case Against Data Driven Design . Der Autor schlägt vor, das Spieldesign nicht von Daten leiten zu lassen, da die Entwicklung eines Spiels mehr Zeit in Anspruch nehmen würde, da der Spieleentwickler die Programmierlast trägt. Stattdessen gibt es einen Spielprogrammierer, der das Spiel frei vom Skizzendesign programmiert und nach Abschluss der Spielprogrammierung vom Spieledesigner überprüft wird. Er nennt das programmierergesteuert. Was ich von dieser Methode halte, ähnelt meiner bisherigen Vorgehensweise: Die Spielelogik ist die Anwendung selbst, im Sinne der obigen Idee, die Anwendung ist der Spieleditor, und das eigentliche Spiel basiert auf dem Tool.
Die erste Methode erscheint mir sinnvoller, da Spielkomponenten für viele Projekte wiederverwendet werden können. Bei der zweiten Methode, die datengesteuertes Design ablehnt, gehört der Spielcode nur zu diesem Spiel. Aus diesem Grund denke ich, dass Warcraft so viele Spielgenres enthält, wie das ursprüngliche Warcraft und verschiedene benutzerdefinierte Karten, und eines der bekanntesten: DOTA, das tatsächlich ein neues Genre definiert. Aus diesem Grund habe ich gehört, die Leute nennen den World Editor die Spiele-Engine. Ist das wahr, wie eine Game Engine sein sollte?
Nach alledem möchte ich nur überprüfen, ob es einen Fehler in meinem Verständnis dieser Ideen gibt (datengesteuert, Programmiererlaufwerk, Skripterstellung usw.).
quelle
Antworten:
Es ist fast immer ein Vorteil, Ihr Spiel (oder ein beliebiges Softwareprodukt) datengetrieben zu machen. Der einzige wirkliche Nachteil ist, dass Sie möglicherweise etwas mehr Zeit für den Aufbau der entsprechenden Systeme im Vorfeld aufwenden. Es wird sich jedoch für den Rest Ihrer Karriere als Programmierer auszahlen (auch wenn Sie diese Systeme nicht die ganze Zeit über wiederverwenden, werden Sie die Techniken wiederverwenden, die Sie zum Erstellen dieser Systeme eingesetzt haben).
Die Herausforderung und wo die Trennung in diesen beiden von Ihnen verknüpften Artikeln zum Tragen kommt, ist, was Sie auswählen, um Daten einzugeben, und wen Sie auswählen, um Zugriff auf diese Daten zu gewähren. Grundsätzlich bedeutet datengetriebenes Design und Entwicklung nur, dass Sie Informationen in einen externen Speicher stellen, diese Informationen zur Laufzeit laden und darauf reagieren. Ihr Anwendungscode macht das, was die externen Daten ihm sagen, anstatt dass Sie Anwendungscode schreiben, der direkt das tut, was Sie für das Endergebnis halten. Es ist keine komplexe Idee.
Sie müssen keine komplexen "komponentengetriebenen Architekturen" erstellen (wie es heutzutage üblich ist). Das Einfügen von Konstanten zur Optimierung der Physik (Gravitationskraft, Restitutionskoeffizienten) in eine Textdatei erfolgt datengesteuert. Skripte (in Lua oder etwas anderem) sind datengetrieben. Beschreiben Ihrer Ebenendaten in XML. Sowas auch.
Sie können nahezu jede Softwarekomponente mit Daten betreiben und auswählen, mit welchen Sie dies tun möchten. Entwicklerzeit ist teuer; Programmiererzeit besonders so. Wenn Sie sich oder anderen Programmierern Zeit sparen können, indem Sie Verhalten und Daten in einem externen Speicher ablegen und das Spiel nicht für jede kleine Änderung neu kompilieren müssen, sollten Sie dies tun. Sie sparen Geld und erledigen Ihre Aufgaben schneller.
Außerdem laufen Sie ein großes Risiko, wenn Sie versuchen, "Designer-Design" zu machen, und lassen Programmierer "diese Designs Wirklichkeit werden lassen", was einen Programmierer dazu zwingt, in der Iterationsschleife für die Arbeit eines Designers zu existieren Er ist nur ein Code-Affe, der ständig kleine Änderungen am Design vornimmt. Dies kann für die große Mehrheit der Programmierer eine massive Demoralisierung darstellen, die an interessanten technischen Herausforderungen arbeiten möchten und nicht daran, ein Vertreter des Designers zu sein.
Für Ihre spezifischen Fragen:
Eine "Game Engine" hat eigentlich keine feste Definition. Im Allgemeinen ist es die vereinheitlichte Sammlung der zugrunde liegenden Technologie, die für die Erstellung eines Spiels verwendet wird und normalerweise von einer Reihe verwandter Tools unterstützt wird (und daher recht datengetrieben ist). Aber es variiert ziemlich stark von Kontext zu Kontext.
Sie scheinen mehr oder weniger auf dem richtigen Weg zu sein, obwohl Sie die datengetriebene Konstruktion und Entwicklung möglicherweise übermäßig komplizieren, indem Sie sie mit komponentenbasierten Systemen kombinieren.
quelle
Als Autor des zweiten Beitrags möchte ich einige Punkte klarstellen.
Am Ende gibt es keine richtige oder falsche Antwort. Es ist eine Frage, wie Sie und Ihre Mitarbeiter sich wohlfühlen. Als ich vor einiger Zeit diesen Blog schrieb, wurde viel darüber gesprochen, wie die ganze Arbeit an die Designer weitergegeben werden sollte, und ich wollte darüber schreiben, wie viele erfolgreiche Spielefirmen, von denen ich wusste, dass sie eine andere Balance gefunden haben.
Außerdem ist mein Blogeintrag 5 Jahre alt. Es scheint, als würden sich viel mehr Studios in Richtung Skriptsprachen bewegen und so weiter, aber sie entwickeln ausgereifte Tools, um sie zu debuggen, was meine Hauptbeschwerde war. Als ich das geschrieben habe, glaube ich nicht, dass es Unreal Kismet gab, das ich nicht benutzt habe, aber es scheint, als würden sie versuchen, das Scripting zu vereinfachen, und es hat anscheinend einen Debugger. (Keine Ahnung, wie gut es funktioniert)
Ich glaube, dass Sie bei Spielen im kleineren Maßstab nicht versuchen möchten, eine Skriptsprache oder ähnliche Funktionen in Ihre Technologie einfließen zu lassen, aber wenn Sie ein riesiges Team haben und viel Zeit für Technologie haben, ist dies möglich Richtig und der Zeitaufwand kann sinnvoll sein, je nachdem, wie Ihr Entwicklungsteam gerne arbeitet. Persönlich werde ich wahrscheinlich so lange wie möglich an C ++ festhalten, da es für mich das einfachste und schnellste ist, da ich oft versuchen muss, "Features" wie die Garbage Collection zu umgehen.
quelle
Sie sollten sich die BitSquid Tech Engine ansehen . Es basiert auf DOD-Konzepten. Der Blog von Niklas Frykholm ist sehr interessant. Es gibt viele Artikel darüber, wie dieser Motor konstruiert ist.
Auf der GDC 2011 hat Niklas einen Vortrag über Data Driven Renderer gehalten .
quelle