ファイルシステム

はじめに

ファイルシステムは、アセットの保存方法とアクセス方法を管理します。また、適切に設計されたファイルシステムにより、複数の開発者が共同作業中に同じソースファイルとアセットを編集できます。 Godotは、すべてのアセットをファイルシステムのファイルとして保存します。

実装

ファイルシステムはディスク上にリソースを格納します。スクリプトからシーンPNGイメージに至るまであらゆるものがエンジンのリソースとなります。ディスク上のほかのリソースを参照するプロパティーがリソースに含まれている場合は、それらのリソースへのパスも含まれます。リソースに組み込みのサブリソースがある場合、そのリソースはバンドルされたすべてのサブリソースとともに1つのファイルに保存されます。たとえば、フォントリソースは多くの場合、フォントテクスチャと一緒にバンドルされています。

Godot ファイルシステムは、メタデータファイルの使用を回避します。既存のアセットマネージャーやVCS(バージョン管理システム)は、私たちが実装できるものよりも優れているので、GodotはSVN、Git、Mercurial、Perforceなどと一緒に作業出来るように最善を尽くします。

ファイルシステムの内容例:

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

project.godotファイル

project.godotファイルはプロジェクト記述ファイルであり、常にプロジェクトのルートにあります。実際、その場所はルートの場所を定義します。これは、プロジェクトを開くときにGodotが検索する最初のファイルです。

このファイルには、win.ini形式を使用したプロジェクト構成がプレーンテキストで含まれています。空のproject.godotでも、空白のプロジェクトの基本的な定義として機能します。

パス区切り文字

Godotでは、パスの区切り文字として / だけを使用できます。これは移植性のために行われます。Windowsでも、すべてのオペレーティングシステムがこれをサポートしているため、 c:\project\project.godot などのパスを c:/project/project.godot と入力する必要があります。

リソースパス

リソースにアクセスするときに、ホストOSファイルシステムのレイアウトを使用すると、面倒で移植性に欠けることがあります。この問題を解決するために、特別なパス res:// が作成されました。

パス res:// は常にプロジェクトルートを指します(project.godotがある場所なので、 res://project.godot は常に有効です)。

このファイルシステムは、エディタからプロジェクトをローカルで実行する場合にのみ、読み取り/書き込み可能になります。エクスポートする場合、または異なるデバイス(スマートフォンやコンソール、DVDなど)で実行する場合、ファイルシステムは読み取り専用になり、書き込みは許可されなくなります。

ユーザー・パス

ゲームの状態の保存やコンテンツパックのダウンロードなどのタスクには、ディスクへの書き込みが引き続き必要です。このために、エンジンは何時でも書き込みが出来る特別なパス user:// があることを確認します。

ホストファイルシステム

また、ホストファイルシステムパスも使用できますが、これらのパスがすべてのプラットフォームで動作するとは限らないため、リリースする製品にはお勧めできません。ただし、Godotで開発ツールを作成する場合は、ホストファイルシステムパスを使用すると便利です。

デメリット

この単純なファイルシステム設計にはいくつかの欠点があります。最初の問題は、アセットを移動すること(プロジェクト内でアセットの名前を変更したり、あるパスから別のパスにアセットを移動したりする)によりこれらのアセットへの既存の参照が失われることです。新しいアセットの場所を指すように再定義する必要があります。

これを避けるには、ファイルシステムドックで、Godot内からすべての移動、削除、および名前変更操作を行います。 Godotの外部からアセットの移動操作をしないでください。そうでないと、依存関係を手動で修正する必要が出てきます(Godotはこの操作を検出し、それを修正する為に役立ちますが、なぜわざわざ面倒な道を行くのですか?)。

2つ目は、WindowsおよびmacOSでは、ファイル名とパス名は大文字と小文字が区別されないことです。大文字と小文字を区別しないホストファイルシステムで作業している開発者がアセットを「myfile.PNG」として保存してから「myfile.png」として参照する場合、プラットフォームでは正常に動作しますが、LinuxやAndroidなどの他のプラットフォームでは動作しません。 この制約は、すべてのファイルを保存するために圧縮パッケージを使用するエクスポートされたバイナリにも適用される場合があります。

Godotを使用する場合、ファイルの命名規則をチーム内で明確に定義することをお勧めします。簡単なフールプルーフ(間違い防止)用の規則の1つは、小文字のファイル名とパス名のみを許可することです。