Що таке GDExtension?

Вступ

GDExtension — це спеціальна технологія Godot, яка дозволяє механізму взаємодіяти зі власними спільними бібліотеками під час виконання. Ви можете використовувати його для запуску рідного коду, не компілюючи його за допомогою двигуна.

Примітка

GDExtension не є мовою сценаріїв і не має відношення до GDScript.

Відмінності між модулями GDExtension і C++

Ви можете використовувати як GDExtension, так і C++ modules для запуску коду C або C++ у проекті Godot.

Вони також дозволяють інтегрувати бібліотеки сторонніх розробників у Godot. Той, який ви повинні вибрати, залежить від ваших потреб.

Попередження

Наразі GDExtension є експериментальним, що означає, що ми можемо порушити сумісність, щоб виправити основні помилки або включити критичні функції.

Переваги GDExtension

На відміну від модулів, GDExtension не потребує компіляції вихідного коду двигуна, що полегшує розповсюдження вашої роботи. Він надає вам доступ до більшості API, доступних для GDScript і C#, дозволяючи вам кодувати логіку гри з повним контролем продуктивності. Це ідеально, якщо вам потрібен високопродуктивний код, який ви хочете розповсюдити як доповнення до asset library.

також:

  • GDExtension не обмежується C та C++. Завдяки third-party bindings, ви можете використовувати його з багатьма іншими мовами.

  • Ви можете використовувати ту саму скомпільовану бібліотеку GDExtension у редакторі та експортованому проекті. З модулями C++ вам доведеться перекомпілювати всі шаблони експорту, які ви плануєте використовувати, якщо вам потрібна його функціональність під час виконання.

  • GDExtension вимагає лише компіляції вашої бібліотеки, а не всього механізму. Це на відміну від модулів C++, які статично скомпільовані в механізм. Щоразу, коли ви змінюєте модуль, вам потрібно перекомпілювати механізм. Навіть із поступовими збірками цей процес повільніший, ніж використання GDExtension.

Переваги модулів C++

Ми рекомендуємо C++ modules у випадках, коли GDExtension недостатньо:

  • Модулі C++ забезпечують більш глибоку інтеграцію в механізм. Доступ GDExtension не такий глибокий, як статичні модулі.

  • Ви можете використовувати модулі C++, щоб надати додаткові функції в проекті, не маючи з собою файлів рідної бібліотеки. Це поширюється на експортовані проекти.

Примітка

Якщо ви помітили, що певні системи недоступні через GDExtension, а доступні через користувальницькі модулі, не соромтеся відкривати питання в репозиторії godot-cpp <https://github.com/godotengine/godot-cpp>`__, щоб обговорити впровадження варіанти для виявлення відсутньої функціональності.

Підтримувані мови

Розробники Godot офіційно підтримують наступні мовні прив’язки для GDExtension:

Примітка

Офіційно підтримувати додаткові мови за допомогою GDExtension не планується. Проте спільнота пропонує кілька прив’язок для інших мов (див. нижче).

Наведені нижче прив’язки розроблено та підтримується спільнотою:

Примітка

Не всі палітурки, згадані тут, можуть бути готові до виробництва. Обов’язково ретельно вивчіть варіанти, перш ніж розпочинати проект із одним із них. Також ще раз перевірте, чи прив’язка сумісна з версією Godot, яку ви використовуєте.

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

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

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

Однак наразі GDExtension є експериментальним, що означає, що ми можемо порушити сумісність, щоб виправити основні помилки або включити критичні функції. Наприклад, GDExtensions, створені для Godot 4.0, несумісні з Godot 4.1 (див. Оновлення GDExtension до 4.1).

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

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