System plików

Wprowadzenie

A file system manages how assets are stored and how they are accessed. A well-designed file system also allows multiple developers to edit the same source files and assets while collaborating. Godot stores all assets as files in its file system.

Implementacja

System plików przechowuje zasoby na dysku. Wszystko, od skryptu, po scenę lub obraz PNG, jest zasobem dla silnika. Jeśli zasób zawiera właściwości, które odnoszą się do innych zasobów na dysku, ścieżki do tych zasobów są również dołączone. Jeśli zasób posiada wbudowane pod-zasoby, to jest on zapisywany w jednym pliku wraz ze wszystkimi dołączonymi pod-zasobami. Na przykład zasób czcionki jest często łączony z teksturami czcionki.

The Godot file system avoids using metadata files. Existing asset managers and VCSs are better than anything we can implement, so Godot tries its best to play along with SVN, Git, Mercurial, Perforce, etc.

Example of file system contents:

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

projekt.godot

The project.godot file is the project description file, and it is always found at the root of the project. In fact, its location defines where the root is. This is the first file that Godot looks for when opening a project.

Plik ten zawiera konfigurację projektu w postaci zwykłego tekstu, w formacie win.ini. Nawet pusty project.godot może funkcjonować jako podstawowa definicja pustego projektu.

Path delimiter

Godot obsługuje tylko / jako separator ścieżek. Odbywa się to ze względu na przenośność. Wszystkie systemy operacyjne, nawet Windows, obsługują ten znacznik, więc ścieżka taka jak c:\project\project.godot musi być wpisana jako c:/project/project.godot.

Ścieżka zasobu

Uzyskując dostęp do zasobów, korzystanie z systemu plików OS hosta może być kłopotliwe i nieporęczne. W celu rozwiązania tego problemu utworzono specjalną ścieżkę res://.

The path res:// will always point at the project root (where project.godot is located, so res://project.godot is always valid).

Ten system plików jest odczytywany/zapisywany tylko wtedy, gdy projekt jest uruchamiany lokalnie z edytora. Po wyeksportowaniu lub uruchomieniu na różnych urządzeniach (takich jak telefony, konsole lub płyty DVD) system plików stanie się tylko do odczytu i zapis nie będzie już dozwolony.

Ścieżka użytkownika

Writing to disk is still needed for tasks such as saving game state or downloading content packs. To this end, the engine ensures that there is a special path user:// that is always writable.

System plików hosta

Alternatively host file system paths can also be used, but this is not recommended for a released product as these paths are not guaranteed to work on all platforms. However, using host file system paths can be useful when writing development tools in Godot.

Drawbacks

Ta prosta konstrukcja systemu plików ma pewne wady. Pierwsza z nich dotyczy tego, że przeniesienie zasobów (zmiana ich nazwy lub przeniesienie ich z jednego miejsca na drugie w projekcie) zniszczy istniejące odniesienia do tych zasobów. Odniesienia te będą musiały zostać ponownie ustawione, aby wskazać nową lokalizację zasobów.

Aby tego uniknąć, wykonaj wszystkie operacje przenoszenia, usuwania i zmiany nazw z poziomu Godota w panelu na systemie plików. Nigdy nie przenoś zasobów spoza Godota, ponieważ jego błędne zależności będą musiały być naprawione ręcznie (Godot wykrywa to i pomaga naprawić je tak czy inaczej, ale czemu sobie życie utrudniać?).

The second is that, under Windows and macOS, file and path names are case insensitive. If a developer working in a case insensitive host file system saves an asset as „myfile.PNG”, but then references it as „myfile.png”, it will work fine on their platform, but not on other platforms, such as Linux, Android, etc. This may also apply to exported binaries, which use a compressed package to store all files.

It is recommended that your team clearly define a naming convention for files when working with Godot. One simple fool-proof convention is to only allow lowercase file and path names.