Dateisystem

Einführung

Ein Dateisystem verwaltet wie Assets gespeichert und auf diese zugegriffen wird. Ein gut gestaltetes Dateisystem erlaubt außerdem mehreren Entwicklern kollaborativ dieselben Dateien zu bearbeiten. Godot speichert alle Assets als Dateien im Dateisystem.

Implementierung

Das Dateisystem speichert Ressourcen auf der Festplatte. Alles, vom Script zu Szenen oder PNG Bildern sind Ressourcen für die Engine. Wenn eine Ressource Eigenschaften (Felder) besitzt welche andere Ressourcen im Dateisystem referenzieren so werden diese miteinbezogen. Wenn eine Ressource integrierte Sub-Ressourcen besitzt so werden diese Zusammen in einer einzigen Datei gebündelt gespeichert. Zum Beispiel Schriftarten werden oft mit dazugehörigen Schrift-Texturen für die Darstellung gebündelt.

Godots Dateisystem vermeidet die Nutzung von Meta-dateien. Vorhandene Dateiverwaltungen der Betriebssysteme oder Versionskontrollsysteme (Git, SVN, Mercurial, Perforce, etc.) sind in der Regel besser als alles was zusätzlich implementiert werden könnte, also versucht Godot sein bestes gut mit diesen zusammenzuarbeiten (auch wenn die Verwendung von Metadaten eigentlich nichts damit zu tun hat).

Beispiel von Dateisystem-Inhalten:

/project.godot
/enemy/enemy.tscn
/enemy/enemy.gd
/enemy/enemysprite.png
/player/player.gd

project.godot

Die project.godot Datei ist die Projektdatei für Godot Projekte und befindet sich immer im Wurzelverzeichnis eines Projekts. Tatsächlich definiert der Ort dieser Datei sogar was als das Wurzelverzeichnis für das Projekt genutzt wird. Dies ist die erste Datei die Godot lokalisiert wenn ein Projekt geöffnet wird.

Diese Datei beinhaltet die Konfiguration des Projekts in direkter Text-ausführung unter nutzung des win.ini Formats. selbst eine leere project.godot datei kann als Basis für ein leeres Projekt dienen.

Pfad-Trennzeichen

Godot unterstützt lediglich / als Pfad-Trennzeichen. Dies wird aus Portabilitätsgründen so gehalten, denn alle Betriebssysteme unterstützen dies, sogar Windows, also muss ein Pfad wie C:project\project.godot als C:/project/project.godot angegeben werden.

Ressourcen-Pfad

Beim Zugriff auf eine Ressource kann das Dateisystem-Layout des Betriebssystems umständlich und unter Umständen nicht portabel sein. Um dieses Problem zu umgehen wurde der Spezialpfad res:// geschaffen.

Der Pfad res:// zeigt immer zur Wurzel des Projektverzeichnisses (wo project.godot zu finden ist, also ist res://project.godot immer gültig).

Das Dateisystem ist nur frei für Lese- und Schreibzugriffe wenn ein Projekt lokal im Editor ausgeführt wird. In Exporten (herausgeschriebenen Anwendungen) oder bei de Ausführung auf unterschiedlichen Geräten (wie Mobilgeräten, Konsolen oder schreibgeschützen Medien) wird das schreiben ins Dateisystem gesperrt und nur Lesen ist möglich.

Nutzer-Pfad

Schreiben ins Dateisystem wird dennoch oft benötigt, z.B. um Spielstände abzulegen oder Inhalts-Pakete herunterzuladen. Hierzu stellt die Engine einen Spezialpfad bereit: user://, welcher immer beschreibbar ist. Dieser Pfad wird unter diversen Betriebssystemen zu unterschiedlichen tatsächlichen Pfaden aufgelöst. Lokale Pfadauflösung wird tiefer beschrieben in :ref: doc_data_paths.

Host Dateisystem

Alternativ können auch Host-Dateisystempfade genutzt werden, was allerdings nicht für herausgeschrieben Anwendungen empfohlen wird, da die Korrekte Funktion ihrere Nutzung nicht auf allen Plattformen garantiert werden kann. Dennoch kann es nützlich sein diese zur Entwicklung von Werkzeugen (tools) in Godot zu nutzen.

Nachteile

Es existieren auch Nachteile für diese simple Dateisystem-Gestaltung. Das erste Problem ist dass Verschieben von Assets (Umbenennen oder von einem Ordner in einen anderen innerhalb des Projekts verlegen) existierende Referenzen ungültig macht. Diese Referenzen müssen korrigiert werden so dass sie zum neuen Ort zeigen.

Um dies zu vermeiden sollten alle Aktionen wie Verschieben, Löschen oder Umbenennen innerhalb Godots (im Dateisystem-Dock) ausgeführt werden. Datein sollten nicht außerhalb Godots verschoben werden (Falls dies doch mal vorkommt wird Godot beim Beheben der Probleme versuchen behilflich zu sein. Aber Garantien können nicht gegeben werden, also warum den schweren weg gehen?).

Weiterhin ist es so, dass unter Windows und MacOS Dateien und Pfade in Groß- und Kleinschreibung unterschieden werden. Wenn Entwickler auf einem dieser Systeme eine Datei als myfile.PNG abspeichert und diese aber als myfile.png referenziert wird dies vielleicht unter deren Betriebssystem funktionieren, aber nicht unter z.B. Linux, Android etc. Dies kann auch auf exportierte Binärdateien zutreffen, welche ein komprimiertes Format nutzen um Dateien unterzubringen.

Es wird empfohlen, dass Teams klare Namenskonventionen zur Arbeit in Godot festlegen. Eine simple, einfach einzuhaltende Regel ist Pfade und Dateinamen allesamt in Kleinschreibung zu halten.