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.

Компіляція з .NET

Вимоги

  • .NET SDK 8.0+

    Ви можете використовувати dotnet --info, щоб перевірити, які версії .NET SDK встановлено.

Увімкніть модуль .NET

Примітка

Підтримка C# для Godot історично використовувала середовище виконання Mono замість .NET Runtime і внутрішньо багато речей все ще називають mono замість dotnet або інакше називають mono.

За замовчуванням модуль .NET вимкнено під час створення. Щоб увімкнути його, додайте опцію module_mono_enabled=yes до командного рядка SCons, в іншому випадку дотримуючись інструкцій зі створення бажаних двійкових файлів Годо.

Згенеруйте клей

Частини вихідних кодів керованих бібліотек генеруються з ClassDB. Ці вихідні файли необхідно створити перед створенням керованих бібліотек. Їх можна згенерувати будь-яким двійковим файлом редактора Godot із підтримкою .NET, запустивши його з параметрами --headless --generate-mono-glue, за якими слідує шлях до вихідного каталогу. Цей шлях має бути modules/mono/glue у каталозі Godot:

<godot_binary> --headless --generate-mono-glue modules/mono/glue

Ця команда накаже Godot створити прив’язки C# для Godot API за адресою modules/mono/glue/GodotSharp/GodotSharp/Generated, а прив’язки C# для інструментів редактора за адресою modules/mono/glue/GodotSharp/ GodotSharpEditor/Generated. Після створення цих файлів ви можете створювати керовані бібліотеки Godot для всіх потрібних цілей без необхідності повторювати цей процес.

<godot_binary> посилається на двійковий файл редактора, який ви зібрали з увімкненим модулем .NET. Його точне ім’я буде відрізнятися залежно від вашої системи та конфігурації, але має мати форму bin/godot.<platform>.editor.<arch>.mono, напр. bin/godot.linuxbsd.editor.x86_64.mono або bin/godot.windows.editor.x86_32.mono.exe. Будьте особливо уважні до суфікса .mono! Якщо ви раніше компілювали Godot без підтримки .NET, можливо, у вас були аналогічні двійкові файли без цього суфікса. Ці двійкові файли не можна використовувати для створення клею .NET.

Примітка

Джерела клею необхідно генерувати щоразу, коли змінюється API, зареєстрований у ClassDB. Це, наприклад, коли новий метод реєструється в API сценаріїв або змінюється один із параметрів такого методу. Godot виведе повідомлення про помилку під час запуску, якщо існує невідповідність API між ClassDB і джерелами клею.

Створення керованих бібліотек

Після того, як ви згенерували клей .NET, ви можете створити керовані бібліотеки за допомогою сценарію build_assemblies.py:

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin

Якщо все пройшло добре, каталог GodotSharp, що містить керовані бібліотеки, повинен був бути створений у каталозі bin.

Примітка

За замовчуванням усі збірки розробки мають спільний номер версії, що може спричинити деякі проблеми з кешуванням пакетів NuGet. Щоб вирішити цю проблему, використовуйте GODOT_VERSION_STATUS, щоб надати кожній збірці унікальну версію, або видаліть GodotNuGetFallbackFolder після кожної збірки, щоб очистити кеш пакетів.

На відміну від «класичних» збірок Godot, при збірці з увімкненим модулем .NET (і залежно від цільової платформи) каталог даних може бути створений як для редактора, так і для експортованих проектів. Цей каталог важливий для належного функціонування та має розповсюджуватися разом із Godot. Детальніше про цей каталог див. каталог даних.

Побудувати платформу

Надайте аргумент --godot-platform=<platform>, щоб контролювати, для якої конкретної платформи створено бібліотеки. Пропустіть цей аргумент, щоб створити для поточної системи.

Наразі це лише контролює включення підтримки Visual Studio як зовнішнього редактора, в іншому бібліотеки ідентичні.

Пакети NuGet

Збірки API, генератори вихідних кодів і спеціальний пакет SDK проекту MSBuild поширюються як пакети NuGet. Це все прозоро для користувача, але це може ускладнити процес розробки.

Щоб використовувати Godot із версією для розробки цих пакетів, потрібно створити локальне джерело NuGet, де MSBuild їх зможе знайти.

Спочатку виберіть розташування для локального джерела NuGet. Якщо у вас немає налаштувань, створіть порожній каталог в одному з рекомендованих місць:

  • У Windows C:\Users\<ім'я користувача>\MyLocalNugetSource

  • У Linux, *BSD тощо, ~/MyLocalNugetSource

Пізніше цей шлях називатиметься <my_local_source>.

Вибравши каталог, запустіть цю команду .NET CLI, щоб налаштувати NuGet на використання вашого локального джерела:

dotnet nuget add source <my_local_source> --name MyLocalNugetSource

Коли ви запускаєте сценарій build_assemblies.py, передайте <my_local_source> параметру --push-nupkgs-local:

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source>

Цей параметр забезпечує додавання пакетів до вказаного локального джерела NuGet і видалення конфліктуючих версій пакета з кешу NuGet. Рекомендується завжди використовувати цей параметр під час створення рішень C# під час розробки, щоб уникнути помилок.

Building without depending on deprecated features (NO_DEPRECATED)

When building Godot without deprecated classes and functions, i.e. the deprecated=no argument for scons, the managed libraries must also be built without dependencies to deprecated code. This is done by passing the --no-deprecated argument:

::

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --no-deprecated

Підтримка Double Precision (REAL_T_IS_DOUBLE)

Під час створення Godot із підтримкою подвійної точності, тобто аргументу precision=double для scons, керовані бібліотеки потрібно налаштувати відповідно до аргументу --precision=double:

./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --precision=double

Приклади

Приклад (Windows)

# Build editor binary
scons platform=windows target=editor module_mono_enabled=yes
# Build export templates
scons platform=windows target=template_debug module_mono_enabled=yes
scons platform=windows target=template_release module_mono_enabled=yes

# Generate glue sources
bin/godot.windows.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Build .NET assemblies
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=windows

Приклад (Linux, *BSD)

# Build editor binary
scons platform=linuxbsd target=editor module_mono_enabled=yes
# Build export templates
scons platform=linuxbsd target=template_debug module_mono_enabled=yes
scons platform=linuxbsd target=template_release module_mono_enabled=yes

# Generate glue sources
bin/godot.linuxbsd.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Generate binaries
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd

Каталог даних

Каталог даних є залежністю для двійкових файлів Godot, створених із увімкненим модулем .NET. Він містить важливі файли для правильного функціонування Godot. Його потрібно поширювати разом із виконуваним файлом Godot.

Редактор

Назва каталогу даних для редактора Godot завжди буде GodotSharp. Цей каталог містить підкаталог Api зі збірками API Godot і підкаталог Tools з інструментами, потрібними для редактора, як-от збірки GodotTools і їх залежності.

У macOS, якщо редактор Godot розповсюджується як пакет, каталог GodotSharp можна розмістити в каталозі <bundle_name>.app/Contents/Resources/ всередині пакета.

Шаблони експорту

Каталог даних для експортованих проектів створюється редактором під час експорту. Він називається data_<APPNAME>_<ARCH>, де <APPNAME> — це ім’я програми, як зазначено в налаштуваннях проекту application/config/name і <ARCH> — це поточна архітектура експорту.

У разі експорту з кількома архітектурами буде створено кілька таких каталогів даних.

Параметри командного рядка

Нижче наведено список параметрів командного рядка, доступних під час створення за допомогою модуля .NET:

  • module_mono_enabled=так | ні

    • Створіть Годо з увімкненим модулем .NET.