Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Godots Design-Philosophie

Nun, da Sie sich einen Überblick verschafft haben, lassen Sie uns über Godots Design sprechen.

Jede Spiele-Engine ist anders und erfüllt unterschiedliche Bedürfnisse. Sie bieten nicht nur eine Reihe von Features, sondern auch ein jeweils einzigartiges Engine-Design. Dies führt zu unterschiedlichen Arbeitsabläufen und unterschiedlichen Möglichkeiten, die Strukturen Ihrer Spiele zu gestalten. Dies alles ergibt sich aus ihren jeweiligen Designphilosophien.

Diese Seite soll Ihnen helfen, die Funktionsweise von Godot zu verstehen, angefangen bei einigen Grundpfeilern. Es ist keine Liste verfügbarer Features und auch kein Engine-Vergleich. Um herauszufinden, ob eine Engine für Ihr Projekt gut geeignet ist, müssen Sie sie selbst ausprobieren und deren Design und Einschränkungen verstehen.

Bitte schauen Sie sich Godot explained in 5 minutes an, wenn Sie einen Überblick über die Features der Engine suchen.

Objektorientiertes Design und Komposition

Godot setzt auf objektorientiertes Design mit seinem flexiblen Szenensystem und der Node-Hierarchie. Die Engine versucht sich von strengen Programmier-Patterns fernzuhalten, um das Spiel intuitiv zu strukturieren.

Sie können zum Beispiel mit Godot Szenen zusammenstellen oder zusammenfassen. Es ist wie verschachtelte Fertigteile: Sie können eine BlinkingLight-Szene und einer BrokenLantern-Szene erstellen, die BlinkingLight verwendet. Dann erstellen Sie eine Stadt mit BrokenLanterns. Ändern Sie die Farbe des BlinkingLight, speichern es und alle BrokenLanterns Objekte in der Stadt werden sofort aktualisiert.

Darüber hinaus können Sie von jeder Szene erben.

Eine Godot-Szene kann eine Waffe, ein Charakter, ein Gegenstand, eine Tür, ein Level, ein Teil eines Levels sein... Alles, was Sie möchten. Sie funktioniert wie eine Klasse in reinem Code, außer dass Sie sie frei gestalten können, indem Sie den Editor oder nur den Code verwenden oder beides kombinieren.

Sie unterscheidet sich von den Prefabs, die Sie in verschiedenen 3D-Engines finden, da Sie von diesen Szenen erben und sie erweitern können. Sie können einen Magier erstellen, der Ihren Charakter erweitert. Wenn Sie den Charakter im Editor ändern, wird auch der Magier aktualisiert. Es hilft Ihnen, Ihre Projekte so aufzubauen, dass ihre Struktur mit dem Design des Spiels übereinstimmt.

image0

Beachten Sie auch, dass Godot viele verschiedene Arten von Objekten anbietet, die als Nodes bezeichnet werden und jeweils einen bestimmten Zweck haben. Nodes sind Teil eines Baums und erben immer von ihren Parents bis hin zur Klasse Node. Obwohl die Engine über einige Nodes verfügt, wie z.B. Kollisions-Shapes, die von einem übergeordneten Physik-Bodies verwendet werden, arbeiten die meisten Nodes unabhängig voneinander.

Mit anderen Worten, Godots Nodes funktionieren nicht wie Komponenten in einigen anderen Spiele-Engines.

image1

Sprite ist ein Node2D, ein CanvasItem und ein Node. Er verfügt über alle Eigenschaften und Features der drei Parent-Klassen, z.B. Transforms oder die Möglichkeit, benutzerdefinierte Shapes zu zeichnen und mit einem benutzerdefinierten Shader zu rendern.

Rundum-sorglos-Paket

Godot versucht, seine eigenen Tools zur Verfügung zu stellen, um die häufigsten Bedürfnisse zu erfüllen. Es verfügt über einen dedizierten Skripting-Arbeitsbereich, einen Animations-Editor, einen Tilemap-Editor, einen Shader-Editor, einen Debugger, einen Profiler, die Fähigkeit, Hot-Reloads lokal und auf Remote-Geräten usw. durchzuführen.

image2

Ziel ist es, ein komplettes Paket zum Erstellen von Spielen und ein durchgängiges Benutzererlebnis anzubieten. Sie können immer noch mit externen Programmen arbeiten, solange es ein Import-Plugin in Godot dafür gibt. Oder Sie können eines erstellen, wie den Tiled Map Importer.

Das ist auch teilweise der Grund, warum Godot neben C# seine eigene Programmiersprache GDScript anbietet. GDScript ist auf die Bedürfnisse von Spieleentwicklern und Spieledesignern zugeschnitten und ist eng in die Engine und den Editor integriert.

Mit GDScript können Sie einfachen Code mit Python-ähnlicher Syntax schreiben, jedoch erkennt es Typen und bietet die Vorzüge der Autovervollständigung einer statischen Sprache. Es ist auch für Gameplay-Code mit Built-in-Typen wie Vectors und Colors optimiert.

Beachten Sie, dass Sie mit der GDExtension leistungsstarken Code in kompilierten Sprachen wie C, C++, Rust, D, Haxe oder Swift schreiben können, ohne die Engine neu zu kompilieren.

Beachten Sie, dass der 3D-Arbeitsbereich nicht so viele Tools enthält wie der 2D-Arbeitsbereich. Sie benötigen externe Programme oder Add-ons um Gelände zu bearbeiten, komplexe Charaktere zu animieren und so weiter. Godot bietet eine komplette API, um die Funktionalität des Editors mit Hilfe von Spiele-Code zu erweitern. Siehe Der Godot-Editor ist ein Godot-Spiel unten.

image4

Ein State Machine Editor Plugin in Godot 2 von kubecz3k. Mit ihm können Sie Zustände und Übergänge visuell verwalten.

Open Source

Godot bietet eine vollständig quelloffene Code-Basis unter der MIT-Lizenz an. Das bedeutet, dass alle Technologien, die mit ihm ausgeliefert werden, auch frei sein müssen ("frei" im Sinne von Freiheit). Sie werden größtenteils von Mitwirkenden von Grund auf entwickelt.

Jeder kann proprietäre Tools für die Bedürfnisse seiner Projekte einsetzen - sie werden aber nicht mit der Engine ausgeliefert. Dies kann NVIDIA PhysX, Google AdMob oder ein FBX-Modell-Importer sein. Jedes dieser Plugins kann stattdessen als Drittanbieter-Plugin mitgeliefert werden.

Auf der anderen Seite bedeutet eine offene Codebasis, dass Sie von der Engine lernen und sie erweitern können. Sie können auch Spiele leicht debuggen, da Godot Fehler mit einem Stack Trace ausgibt, auch wenn sie von der Engine selbst stammen.

Bemerkung

Dies beeinflusst in keiner Weise die Arbeit, die Sie mit Godot machen: Es gibt keine Bedingungen, die an die Engine geknüpft sind, oder irgendetwas, das Sie damit machen.

Community-gesteuert

Godot wird von seiner Community, für die Community, und für alle Spieleentwickler da draußen entwickelt. Es sind die Bedürfnisse der Nutzer und offene Diskussionen, die Kern-Updates vorantreiben. Neue Features der Kernentwickler konzentrieren sich oft darauf, was den meisten Nutzern zuerst nützt.

Obwohl nur eine handvoll Kernentwickler in Vollzeit an der Engine arbeiten, hat das Projekt zum Zeitpunkt des Schreibens dieses Textes über 600 Mitwirkende. Programmierer arbeiten an Features, die sie möglicherweise selbst benötigen. Dadurch sieht man Verbesserungen in allen Teilen der Engine in jedem größeren Release.

Der Godot-Editor ist ein Godot-Spiel

Der Godot-Editor läuft auf der Spielengine. Er verwendet das eigene UI-System der Engine und kann beim Testen von Projekten Code und Szenen per Hot-Reload laden oder Spielcode im Editor ausführen. Das bedeutet, dass Sie denselben Code und dieselben Szenen für Ihre Spiele verwenden oder Plugins erstellen und den Editor erweitern können.

Dies führt zu einem zuverlässigen und flexiblen UI-System, da es den Editor selbst steuert. Mit der Annotation @tool können Sie beliebigen Spielcode im Editor ausführen.

image5

RPG in a Box ist ein Voxel-RPG-Editor, der mit Godot 2 erstellt wurde. Er verwendet Godots UI-Tools für sein Node-basiertes Programmiersystem und für den Rest der Benutzeroberfläche.

Setzen Sie das Schlüsselwort @tool an den Anfang einer beliebigen GDScript-Datei und sie wird im Editor ausgeführt. Auf diese Weise können Sie Plugins importieren und exportieren, Plugins wie z.B. benutzerdefinierte Level-Editoren erstellen oder Skripte mit denselben Nodes und APIs erstellen, die Sie in Ihren Projekten verwenden.

Bemerkung

Der Editor ist vollständig in C++ geschrieben und wird statisch in die Binärdatei kompiliert. Das bedeutet, dass Sie ihn nicht wie ein typisches Projekt importieren können, das eine project.godot Datei hat.

Separate 2D- und 3D-Engines

Godot bietet dedizierte 2D- und 3D-Rendering-Engines an. Daher ist die Basiseinheit für 2D-Szenen Pixel. Obwohl die Engines getrennt sind, können Sie 2D in 3D und 3D in 2D rendern sowie 2D-Sprites und -Benutzeroberflächen über Ihre 3D-Welt platzieren.