Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

文件系统

介绍

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

实现

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

Godot 的文件系统特意避免了使用任何元数据文件。因为市面上现有的资产管理器和版本控制系统(VCS)已经非常优秀了,远胜过我们自己重新造轮子。所以,Godot 会尽全力去配合 Subversion、Git、Mercurial 等主流工具。

文件系统内容示例:

/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 的 FileSystem(文件系统)面板内完成。当你在 Godot 里删除文件时,它会弹出一个确认对话框,列出所有被选中的文件以及依赖这些文件的场景。千万不要在 Godot 外部去移动资源文件,否则你就得手动去修复依赖关系了(虽然 Godot 也能检测到这些问题并帮你修复,但何必自找麻烦走弯路呢?)。

第二个缺点是,在 Windows 和 macOS 系统下,文件和路径的名称是不区分大小写的。如果一个开发者在这样不区分大小写的系统上工作,把一个资源保存为 myfile.PNG ,但在代码里却把它引用为 myfile.png ,那么在他自己的平台上运行完全没问题。然而,一旦项目移植到 Linux、Android 等其他平台,就会因为找不到文件而出错。这个问题同样可能影响到导出的游戏包,因为导出的二进制文件通常会使用压缩包来存储所有资源。

因此,建议你的团队在使用 Godot 开发时,明确制定一套文件命名规范。其中有一个绝对稳妥(万无一失)的规范就是:只允许使用小写字母来命名文件和文件夹路径。