О godot-cpp

godot-cpp являются официальными привязками C++ GDExtension, поддерживаемыми как часть проекта Godot.

godot-cpp собран с использованием GDExtension system, которая позволяет получить доступ к Godot почти таким же образом, как modules: большую часть кода движка можно использовать в вашем проекте godot-cpp почти так же, как он есть.

В частности, godot-cpp имеет доступ ко всем функциям, которые есть в GDScript и C#, а также дополнительный доступ к нескольким другим для быстрого низкоуровневого доступа к данным или более глубокой интеграции с Godot.

Различия между модулями godot-cpp и C++

Вы можете использовать как godot-cpp, так и C++ modules для запуска кода C или C++ в проекте Godot.

Они также позволяют интегрировать в Godot библиотеки сторонних разработчиков. Выбор того или иного варианта зависит от ваших потребностей.

Преимущества godot-cpp

В отличие от модулей, godot-cpp (и GDExtensions в целом) не требует компиляции исходного кода движка, что упрощает распространение вашей работы. Он предоставляет доступ к большей части API, доступных для GDScript и C#, позволяя программировать игровую логику с полным контролем производительности. Он идеально подходит, если вам нужен высокопроизводительный код, который вы хотели бы распространять как дополнение в библиотеке asset library.

А также:

  • Вы можете использовать одну и ту же скомпилированную библиотеку godot-cpp в редакторе и экспортированном проекте. При использовании модулей C++ вам потребуется перекомпилировать все шаблоны экспорта, которые вы планируете использовать, если вам потребуется их функциональность во время выполнения.

  • godot-cpp требует компиляции только вашей библиотеки, а не всего движка. В отличие от модулей C++, которые статически компилируются в движок. Каждый раз при изменении модуля необходимо перекомпилировать движок. Даже при инкрементальной сборке этот процесс медленнее, чем при использовании godot-cpp.

Преимущества модулей C++

Мы рекомендуем C++ modules в случаях, когда godot-cpp (или другой системы GDExtension) недостаточно:

  • Модули C++ обеспечивают более глубокую интеграцию с движком. GDExtension не обладает такой же глубиной доступа, как статические модули.

  • Вы можете использовать модули C++ для реализации дополнительных функций в проекте без необходимости переносить с собой файлы собственных библиотек. Это также распространяется на экспортированные проекты.

Примечание

Если вы заметили, что определенные системы недоступны через godot-cpp, но доступны через пользовательские модули, не стесняйтесь открыть вопрос в репозитории godot-cpp, чтобы обсудить варианты реализации для предоставления отсутствующей функциональности.

Совместимость версий

Расширения GDExtensions, предназначенные для более ранних версий Godot, должны работать в более поздних младших версиях, но не наоборот. Например, расширение GDExtension, предназначенное для Godot 4.2, должно работать без проблем в Godot 4.3, но расширение, предназначенное для Godot 4.3, не будет работать в Godot 4.2.

По этой причине при создании GDExtensions вы можете ориентироваться на самую раннюю версию Godot, содержащую необходимые вам функции, а не на самую последнюю. Это избавит вас от необходимости создавать несколько сборок для разных версий Godot.

Из этого правила есть одно исключение: расширения, предназначенные для Godot 4.0, не будут работать с Godot 4.1 и более поздними версиями (см. Обновление ваших GDExtension на 4.1).

Расширения GDExtensions также совместимы только со сборками движка, использующими тот же уровень точности чисел с плавающей запятой, для которого было скомпилировано расширение. Это означает, что если вы используете сборку движка с числами с плавающей запятой двойной точности, расширение также должно быть скомпилировано для чисел с плавающей запятой двойной точности и использовать файл 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.