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 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, а через користувацькі модулі, не соромтеся відкривати задачу в repository godot-cpp, щоб обговорити варіанти реалізації для розкриття відсутньої функціональності.

Сумісність версій

Розширення GDE, що орієнтовані на попередню версію Godot, повинні працювати в пізніших проміжних версіях, але не навпаки. Наприклад, розширення GDE, орієнтоване на Godot 4.2, має чудово працювати в Godot 4.3, але розширення, орієнтоване на Godot 4.3, не працюватиме в Godot 4.2.

З цієї причини, створюючи GDExtensions, ви можете націлитися на найстаршу версію Godot, яка має потрібні вам функції, а не на останню версію Godot. Це може позбавити вас від необхідності створювати кілька збірок для різних версій Godot.

Є один виняток: розширення, орієнтовані на Godot 4.0, не працюватимуть з Godot 4.1 та пізнішими версіями (див. Оновлення GDExtension до 4.1).

GDExtensions також сумісні лише зі збірками механізмів, які використовують той самий рівень точності з плаваючою комою, для якого було скомпільовано розширення. Це означає, що якщо ви використовуєте збірку двигуна з числами з плаваючою точкою подвійної точності, розширення також має бути скомпільовано для чисел з плаваючою точкою подвійної точності та використовувати файл extension_api.json, згенерований вашою спеціальною збіркою двигуна. Перегляньте Великі світові координати для деталей.

Загалом кажучи, якщо ви створюєте власну версію Godot, вам слід згенерувати з неї файл extension_api.json для ваших GDExtensions, оскільки він може мати деякі відмінності від офіційних збірок Godot. Ви можете дізнатися більше про процес використання власних файлів extension_api.json у розділі build system.