關於 godot-cpp
godot-cpp 是官方的 C++ GDExtension 繫結,作為 Godot 專案的一部分進行維護。
godot-cpp 建立在 GDExtension 系統 之上,能以與 模組 幾乎相同的方式存取 Godot:許多 引擎程式碼 幾乎可原封不動地用在你的 godot-cpp 專案中。
特別是,godot-cpp 能存取 GDScript 與 C# 可用的所有功能,並額外提供一些介面以便快速地低階存取資料,或與 Godot 進行更深度的整合。
godot-cpp 與 C++ 模組的差異
你可以使用 godot-cpp 或 C++ 模組 在 Godot 專案中執行 C/C++ 程式碼。
這兩者也都能將第三方函式庫整合進 Godot。你該選哪一種方式,取決於你的需求。
godot-cpp 的優點
與模組不同,godot-cpp(以及一般的 GDExtension)不需要編譯引擎原始碼,使散佈你的作品更容易。它提供與 GDScript 與 C# 幾乎相同的 API,讓你在撰寫遊戲邏輯時能完全掌控效能。若你需要將高效能的程式碼製作成附加元件並發佈到 素材庫,這是理想的選擇。
此外:
你可以在編輯器與匯出後的專案中使用同一份已編譯的 godot-cpp 程式庫。相較之下,若使用 C++ 模組,若要在執行時提供其功能,則必須重新編譯所有計畫使用的匯出範本。
使用 godot-cpp 時只需編譯你的程式庫,而非整個引擎。這與 C++ 模組不同,後者會被靜態編譯進引擎中。每次你變更模組,都得重編整個引擎;即使有增量建置,這流程仍比使用 godot-cpp 慢。
C++ 模組的優點
若你遇到 godot-cpp(或其他 GDExtension 系統)無法滿足需求的情況,建議改用 C++ 模組:
C++ 模組可以與引擎有更深度的整合。GDExtension 的存取層級不如靜態模組。
你可以透過 C++ 模組為專案加入額外功能,不必攜帶原生函式庫檔案。這同樣適用於匯出的專案。
備註
如果你發現某些系統可透過自訂模組存取,但無法透過 godot-cpp 存取,歡迎在 godot-cpp 儲存庫 提出 issue,討論如何實作並公開缺少的功能。
版本相容性
以較早的 Godot 版本為目標所建置的 GDExtension 通常可在後續的小版本中運作,反之則不行。例如,目標為 Godot 4.2 的 GDExtension 在 Godot 4.3 應可正常運作,但目標為 Godot 4.3 的 GDExtension 無法在 Godot 4.2 運作。
因此,在開發 GDExtension 時,建議以支援你所需功能的最低 Godot 版本為目標,而非最新版本。如此可避免為不同 Godot 版本重複建置多份函式庫。
此規則有一個例外: 以 Godot 4.0 為目標的擴充在 Godot 4.1 及後續版本中將 無法 運作 (請見 將 GDExtension 更新到 4.1)。
GDExtension 也僅支援與其編譯時浮點精度相同的引擎版本。也就是說,如果你使用的是雙精度浮點(double precision)引擎,GDExtension 也必須用雙精度建置,並且必須使用你自訂引擎版本所產生的 extension_api.json。詳情請參考 大世界座標。
一般來說,如果你有自訂 Godot 引擎版本,建議使用該版本產生一份 extension_api.json 來給你的 GDExtension 使用,因為這可能與官方版本有細微差異。