Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

檔案系統

前言

檔案系統控制了素材的保存與存取方式。設計得好的檔案系統也能讓多個開發者在協作時編輯相同的原始檔與素材。Godot 會將所有的素材在自身檔案系統中保存為檔案。

實作

檔案系統會將資源保存在硬碟上。不論是腳本、場景、或 PNG 圖片等任何東西對於引擎來說都是資源。若資源包含了參照硬碟上其他資源的屬性,則亦會包含該屬性的路徑。若資源有內建子資源,則資源會與其他捆綁的子資源一併保存在單一檔案內。如,字形資源通常會與字形紋理一起打包。

Godot 檔案系統避免使用後設資料 (Metadata) 檔案。現存的素材管理員與版本控制系統 (VCS) 比我們能做出來的東西好太多了,所以 Godot 就嘗試盡力配合 SVN、Git、Mergurial、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

資源路徑

存取資源時,若直接使用作業系統的檔案系統配置可能會很麻煩而且變得不可移植。為了解決這個問題,我們製作了特別的路徑 res://

res:// 路徑會指向專案的根目錄(也就是 project.godot 的位置,所以 res://project.godot 這個路徑永遠有效)。

在編輯器中執行專案時檔案系統為可寫可讀模式。匯出或在不同的裝置上(如手機或平台主機、或從 DVD 上執行)執行時,檔案系統會轉變為唯讀模式且無法再次寫入。

使用者路徑

保存遊戲狀態或下載 DLC 時仍然需要將資料寫入硬碟。為了這個目的,引擎保留了一個特殊的路徑 user:// ,永遠可寫入。這個路徑會根據執行專案的作業系統的不同而以不同的方式解析。有關本機路徑解析的更多資訊請參考 Godot 專案中的檔路徑

主機檔案系統

也可以使用主機檔案系統來替代,但並不建議在釋出正式版產品時使用。因為這些路徑並不保證能在所有平台上正常運作。但使用主機檔案系統在 Godot 內撰寫開發工具時依然很有用。

缺點

這種簡單的檔案系統設定還是有一些缺點的。第一個問題時移動素材(重新命名或在專案中從一個路徑移到另一個路徑)會破壞這些素材現有的參照。這些參照必須重新定義到新的素材路徑上。

為了解決這個問題,在移動、刪除、或是重新命名時,都應該從 Godot 的檔案系統 Dock 內操作。請勿於 Godot 外部移動素材,否則相依性關係就必須手動修復(雖然 Godot 會自動偵測到這些問題並協助你處理,但為什麼要特地選麻煩的方法呢?)。

第二點則是,在 Windows 與 macOS 下,檔案與路徑名稱不區分大小寫。若開發者在不區分大小寫的檔案系統下將素材保存為 myfile.PNG 但使用 myfile.png 來引用,這樣可以在開發者的平台上正常運作,但其他平台則不能執行,如 Linux 或 Android 等。這也包含了匯出為二進位檔案,會使用壓縮包來保存所有檔案。

建議你的團隊在使用 Godot 時要明訂檔案命名規範。其中一種簡單暴力的命名規範就是只允許在檔案與路徑名稱中使用小寫。