文件系统

前言

文件系统管理资源的存储方式和访问方式. 精心设计的文件系统还允许多个开发人员在协作时编辑相同的源文件和资源.Godot将所有资源作为文件存储在其文件系统中.

实现

文件系统将资源存储在磁盘上. 从脚本到场景或PNG图像的任何内容都是引擎的资源. 如果一个资源包含引用磁盘上其他资源的属性, 则它还将包括这些资源的路径. 如果一个资源具有内置的子资源, 则该资源与所有捆绑的子资源一起保存在单个文件中. 例如, 字体资源通常与字体纹理捆绑在一起.

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 Subversion, Git, Mercurial, etc.

文件系统内容示例:

  1. /project.godot
  2. /enemy/enemy.tscn
  3. /enemy/enemy.gd
  4. /enemy/enemysprite.png
  5. /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中编写开发工具时, 使用主机文件系统路径可能会很有用.

缺点

There are some drawbacks to this file system design. The first issue is that moving assets around (renaming them or moving them from one path to another inside the project) will break existing references to these assets. These references will have to be re-defined to point at the new asset location.

为避免这种情况, 请在Godot中的文件系统停靠面板上, 进行所有移动, 删除和重命名操作. 切勿从Godot外部移动资源, 否则必须手动修复依赖关系(Godot会检测到此问题并帮助你修复它们, 但是为什么要走这条艰难的路线呢?).

第二个问题是在Windows和macOS下, 文件名和路径名不区分大小写. 如果开发人员在不区分大小写的主机文件系统中工作, 将资源保存为 myfile.PNG , 然后将其引用为 myfile.png , 则该资源将在该平台上正常工作, 但在其他平台(例如Linux, Android等)上无法正常工作. 这也适用于导出的二进制文件, 该文件使用压缩包存储所有文件.

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