組織專案

簡介

由於 Godot 並沒有限制專案架構與如何使用檔案系統,在學習使用 Godot 時,如何組織檔案便很有挑戰性。本教學建議的工作流程是一個不錯的開始。我們也會介紹如何配合 Godot 使用版本控制。

組織

Godot 本質基於場景,並按照檔案系統原本的樣子來使用,不使用後設資料或素材資料庫。

與其他遊戲引擎不同,許多資源都包含在場景內,因此在檔案系統中的檔案數量也就比較少。

因此,常見的做法是儘量將素材放得靠近場景。隨著專案成長,這樣也比較容易管理。

例如,我們通常會將基本素材如 Sprite 圖片、3D 模型網格、材質與音樂…等放在單一資料夾內。接著可以使用各個不同的資料夾來儲存各個做好的關卡會使用到的素材。

/project.godot
/docs/.gdignore  # See "Ignoring specific folders" below
/docs/learning.html
/models/town/house/house.dae
/models/town/house/window.png
/models/town/house/door.png
/characters/player/cubio.dae
/characters/player/cubio.png
/characters/enemies/goblin/goblin.dae
/characters/enemies/goblin/goblin.png
/characters/npcs/suzanne/suzanne.dae
/characters/npcs/suzanne/suzanne.png
/levels/riverdale/riverdale.scn

風格指南

為了在各專案間保持一貫性,我們建議依照下列方針:

  • 資料夾與檔案名稱使用 snake_case (除了 C# 腳本例外)。這樣一來也同時解決了從 Windows 上匯出專案後可能會出現的區分大小寫功能。C# 腳本為本規則的例外,因為 C# 腳本的準則為以類別名稱命名檔名,而類別名稱應該為 PascalCase。

  • 節點名稱應為 PascalCase ,該命名方式與內建節點一樣。

  • 一般來說,就算不是編輯器外掛,也儘量將第三方資源放在最上層的 addons/ 資料夾中。這樣可以更容易追蹤哪些檔案是第三方。但本規則也有一些例外,如,若在角色上使用第三方遊戲素材,則放到跟角色場景與腳本相同的資料夾內比較合理。

匯入

Godot 3.0 版以前,匯入流程會從專案外部讀取檔案。雖然對於大型專案來說很好用,但對許多開發者來說卻難以組織。

因此,素材現在可以在專案資料夾內透明地匯入。

忽略特定資料夾

若要防止 Godot 從特定資料夾內匯入檔案,可於該資料夾內建立一個空白檔案 .gdignore (必須以 . 開頭)。對於初始專案來說能有效提高速度。

備註

若要在 Windows 上建立以點開頭的檔案,可使用如 Notepad++ 的文字編輯器,或於命令提示字元使用下列指令: type nul > .gdignore

忽略資料夾後,於該資料夾內的資源將不再可用 load()preload() 方法載入。

忽略資料夾也會自動將該資料夾從檔案系統 Dock 中隱藏起來,可減少雜亂。

區分大小寫

Windows 與近期的 macOS 版本預設使用不區分大小寫的檔案系統,而 Linux 發行版則預設使用有區分大小寫的檔案系統。由於 Godot 的 PCK 虛擬檔案系統是區分大小寫的,對於匯出專案來說會導致問題。要避免大小寫問題,建議保持專案內所有檔案都使用 snake_case (並主要使用小寫文字)。

備註

當風格指南另有規定時,便可不遵守此規則 (如 C# 風格指南)。但,應維持一致性以避免犯錯。

為了 Windows 10 中避免區分大小寫的錯誤,也可以將專案資料夾中設定成有區分大小寫。開啟用於 Linux 的 Windows 子系統 (WSL) 後,請於 PowerShell 中執行下列指令:

# To enable case-sensitivity:
fsutil file setcasesensitiveinfo <path to project folder> enable

# To disable case-sensitivity:
fsutil file setcasesensitiveinfo <path to project folder> disable

若尚未啟用用於 Linux 的 Windows 子系統,請 以系統管理員身份執行 PowerShell 並輸入下列指令,接著將會詢問是否重開機:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux