Про 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.