Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

關於 godot-cpp

godot-cpp 是官方的 C++ GDExtension 繫結,作為 Godot 專案的一部分進行維護。

godot-cpp 建立在 GDExtension 系統 之上,能以與 模組 幾乎相同的方式存取 Godot:許多 引擎程式碼 幾乎可原封不動地用在你的 godot-cpp 專案中。

特別是,godot-cpp 能存取 GDScriptC# 可用的所有功能,並額外提供一些介面以便快速地低階存取資料,或與 Godot 進行更深度的整合。

godot-cpp 與 C++ 模組的差異

你可以使用 godot-cppC++ 模組 在 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。詳情請參考 大世界座標

Generally speaking, if you build a custom version of Godot, you should generate an extension_api.json from it for your GDExtensions, because it may have some differences from official Godot builds. You can learn more about the process of using custom extension_api.json files in the build system section.