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 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.