Boehrsi.de - IT und Gaming Blog

Devlog #5 - Project Space - Struktur

Erstellt am event Uhr von account_circle Boehrsi in label Development
Devlog #5 - Project Space - Struktur Bild

Mit meinem fünften Game Devlog zu Project Space wird es nun wie angekündigt etwas konkreter. Denn während ich in den ersten vier Beiträgen die Idee, generelle Ansätze, das Tooling und Konzepte beschrieben habe, so möchte ich nun näher an den eigentlichen Content herankommen, sowohl vom Inhalt her, wie auch zeitlich. Früher oder später wäre ich gerne auf dem aktuellen Stand mit meiner Entwicklung, sodass ich nicht aus der Vergangenheit referiere, sondern direkt aktuelle Ereignisse mit euch teilen kann. Dadurch hoffe ich das weniger verloren geht.
Das Thema heute ist der Einstieg ins eigentliche Projekt, also auf technischer Ebene in Godot open_in_new. Hier ist der Anfang natürlich gewohnt schwer, denn auf einem quasi leeren Blatt Papier anzufangen ist immer eine Herausforderungen. Ich startete mit einigen Recherchen bezüglich Best Practices im Kontext von Godot, denn ich lege viel Wert auf Code Quality und Strukturen. Mit besagter Code Quality sollte man übrigens vorsichtig sein, denn man steht sich hier gerne selber im Weg, aber dazu später mehr.

Ordnerstruktur open_in_new

Heute gibt es mein Setup, mit Ordnerstruktur und grundsätzlichen Ideen dahinter.

addons

Godot Addons, die die Funktionalität der Engine oder des Editors erweitern. Ich nutze z.B. antialiased_line2d open_in_new, um besser Linien darstellen zu können, ohne das selbige kantig aussehen.

assets

Alle audiovisuellen Inhalte und weitere Dateien, welche als Assets direkt ins Spiel eingebunden werden. Dazu gehören unter anderem Texturen, Icons und Schriftarten.

external

Externe Dateien, welche z.B. genutzt werden um Assets zu erstellen, aber nicht direkt im Spiel integriert werden. Blender open_in_new und GIMP open_in_new Dateien sind hier als Beispiele zu nennen.

licenses

Lizenzen für genutzte Inhalte. Egal ob Shader, Schriftarten oder Icons, viele Inhalte haben Lizenzen, welche komplett oder in Kurzform gemeinsam mit den Inhalten verteilt werden müssen. Generell darf natürlich nur genutzt werden was überhaupt durch die jeweilige Lizenz erlaubt ist.

managers

Globale Manager Objekte, welche dedizierte Aufgaben haben und als zentrale Anlaufstelle für verschiedene Komponenten genutzt werden. Mein GameManager hält z.B. für alle interessierten Parteien den globalen Game State bereit. Methoden werden direkt auf dem Manager aufgerufen und im Fall einer Änderung des Zustands des Spiels wird ein entsprechendes Signal open_in_new ausgelöst.

resources

Datenobjekte, welche direkt im Godot Editor bearbeitet werden können. Dafür wird der Godot eigene Typ Resource open_in_new genutzt, welcher es erlaubt wiederverwendbare Strukturen zu definieren, welche dann in den jeweiligen Nodes genutzt werden können. Dort liegen z.B. Upgrades für die Tower und darin enthalten die jeweiligen Fähigkeiten, die Beschreibung und ein Icon. Diese können dann direkt an Nodes open_in_new gebunden werden oder dynamisch, z.B. am Ende einer Runde, durch den Spieler ausgewählt werden.

scenes

Die eigentlichen Szenen des Spiels sind hier zu finden. Scenes open_in_new sind in Godot die Basis für alles sichtbare, also sowohl die UI bzw. das HUD, wie auch die gesamte Spielwelt und bestehen aus verschiedenen Nodes. In diesem Ordner gibt es diverse weitere Unterordner, um Inhalte weiter zu strukturieren. Beispiele sind hier Ordner für das HUD, Maps, Gegner oder die eigentliche Spielwelt. Scripte die zu einer konkreten Szene gehören liegen direkt neben selbigen im identischen Ordner.

scripts

Globale Scripte, welche nicht zu einer konkreten Szene gehören. Dazu gehören unter anderem Mathe Utils oder Helper für den Umgang mit Timern.

singeltons

Global verfügbare Objekte, welche Daten zur Verfügung stellen. Beispiele sind hier das Signals Singelton und die Translations für genutzte Strings. Über diese zentralen Schnittstellen können dann aus jedem beliebigen Script Signale genutzt oder auf die verfügbaren Texte zugegriffen werden. Im Gegensatz zu den oben erwähnten Managern haben Singeltons in meinem Projekt keine Logik für konkrete Aufgaben, sondern liefern lediglich Daten oder Schnittstellen.

sceneHandler.tscn & scene_handler.gd

Abseits der diversen Ordner gibt es auf dem Top-Level des Projekts die Einstiegsdatei. Selbige wird direkt zum Start des Spiels geladen und dient als Verwalter aller weiteren Szenen. Je nach Zustand des Spiels wird hier dynamisch der Hauptmenü, das eigentliche Spiel oder jede andere Szene eingebunden. Auch die globale Verwaltung von z.B. der Pause Funktion ist hier implementiert.

Dieses Setup basiert auf meinen vorherigen Erfahrungen mit der Softwareentwicklung, ergänzt durch Tutorials und Godot spezifischen Input. Es gilt wie immer bei derartigen Dingen, Ideen anderer Entwickler als Input zu nutzen ist gut, aber man muss für sich persönlich die richtige Struktur finden. Es gibt hier keine richtige oder falsche Lösung, die Lösung muss für das eigene Projekt passen. Mit diesem Schlusssatz soll es das für heute gewesen sein, aber weitere Artikel sind bereits in der Vorbereitung. Falls ihr Fragen habt meldet euch gerne in den Kommentaren.

Related Links
Kommentare  
Kommentar erstellen
Mit dem Abschicken des Kommentars erklären sie sich mit der in der Datenschutzerklärung dargelegten Datenerhebung für Kommentare einverstanden. Spam, unangebrachte Werbung und andere unerwünschte Inhalte werden entfernt. Das Abonnieren via E-Mail ist nur für E-Mail Adressen erlaubt die Sie rechtmäßig administrieren. Widerrechtliche Abonnements werden entfernt.