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.
Checking the stable version of the documentation...
關於 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。詳情請參考 大世界座標。
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.