文件系统
前言
文件系统管理资源的存储方式和访问方式. 精心设计的文件系统还允许多个开发人员在协作时编辑相同的源文件和资源.Godot将所有资源作为文件存储在其文件系统中.
实现
文件系统将资源存储在磁盘上. 从脚本到场景或PNG图像的任何内容都是引擎的资源. 如果一个资源包含引用磁盘上其他资源的属性, 则它还将包括这些资源的路径. 如果一个资源具有内置的子资源, 则该资源与所有捆绑的子资源一起保存在单个文件中. 例如, 字体资源通常与字体纹理捆绑在一起.
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外部移动资源, 否则必须手动修复依赖关系(Godot会检测到此问题并帮助您修复它们, 但是为什么要走这条艰难的路线呢?).
第二个问题是在Windows和macOS下, 文件名和路径名不区分大小写. 如果开发人员在不区分大小写的主机文件系统中工作, 将资源保存为 myfile.PNG
, 然后将其引用为 myfile.png
, 则该资源将在该平台上正常工作, 但在其他平台(例如Linux, Android等)上无法正常工作. 这也适用于导出的二进制文件, 该文件使用压缩包存储所有文件.
建议您的团队在使用Godot一起工作时明确定义文件的命名约定. 一种简单的万无一失的约定是仅允许使用小写的文件名和路径名.