檔案系統

前言

檔案系統管理素材的儲存與存取方式。設計良好的檔案系統也能讓多位開發者在協作時共同編輯相同的原始檔與素材。Godot 會將所有素材存為檔案於自身檔案系統中。

實作

檔案系統會將資源儲存在硬碟上。對引擎來說,無論是腳本、場景還是 PNG 圖片,都是一種資源。若資源包含指向硬碟上其他資源的屬性,也會將該資源的路徑一併保存。如果資源有內建的子資源,則會將資源與所有子資源一起儲存於同一個檔案中。例如,字型資源通常會與字型貼圖一同打包。

Godot 的檔案系統避免使用中繼資料(Metadata)檔案。現有的素材管理工具與版本控制系統(VCS)都比我們自己開發的更優秀,因此 Godot 盡可能與 SVN、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

資源路徑

在存取資源時,若直接使用作業系統的檔案系統路徑會顯得繁瑣且缺乏可移植性。為了解決這個問題,Godot 設計了特殊路徑 res://

res:// 路徑永遠指向專案根目錄(即 project.godot 所在處,因此 res://project.godot 始終是有效的)。

當專案於編輯器內執行時,檔案系統為可讀寫模式。當專案匯出或於其他裝置(如手機、主機、或從 DVD 執行)運行時,檔案系統則會變為唯讀,無法寫入。

使用者路徑

像是保存遊戲進度或下載擴充內容等情境,仍需寫入硬碟。為此,Godot 引擎保證有一個永遠可寫入的特殊路徑 user://。此路徑會依專案運行的作業系統而有所不同。關於本機路徑解析,詳見 Godot 專案中的檔路徑

主機檔案系統

你也可以直接使用主機檔案系統的路徑,但不建議於發佈正式產品時採用,因這些路徑無法保證在所有平台運作。不過在 Godot 裡開發工具時,這樣做會很方便。

缺點

這種檔案系統設計仍有一些缺點。第一,在專案內移動素材(重新命名或更改路徑)時,現有的參照會失效,必須重新指定這些參照的路徑。

為避免這類問題,請務必在 Godot 的檔案系統 Dock 裡進行所有移動、刪除或重新命名操作。切勿在 Godot 以外的地方移動素材,否則依賴關係就得自己手動修正(雖然 Godot 會協助偵測並修復,但何苦自找麻煩呢?)。

其次,在 Windows 與 macOS 系統下,檔案與路徑名稱不區分大小寫。若開發者將素材儲存為 myfile.PNG,卻以 myfile.png 參照,在這些系統上雖能正常運作,但在 Linux、Android 等區分大小寫的平台上就會出錯。這情況也適用於匯出時以壓縮封包儲存檔案的情境。

建議團隊在使用 Godot 時,明訂檔案命名規範。最簡單保險的方法,就是僅允許檔案與路徑名稱使用小寫字母。