Поддержка C# под Android в Godot 3.2

Хотя Godot получил поддержку C# в версии 3.0, не хватало поддержки ключевых платформ, особенно мобильных и браузеров. Судя по новости с Godot сайта, C# под Android завезут в Godot 3.2.

Это стало возможным, благодаря щедрому пожертвованию Microsoft в размере 24.000$. Грант будет использован для финансирования работы по C# в Godot в течение года. Это второй раз, когда разработчики получают грант от Microsoft.

C# на Android

C# интерактивный shell из игры SkyOfSteel от ForLoveOfCats, работающий на Android эмуляторе.

C# интерактивный shell из игры SkyOfSteel от ForLoveOfCats, работающий на Android эмуляторе.

До сих пор Godot поддерживал сценарии на C# только на десктопах. План состоял в том, чтобы со временем добавить поддержку других платформ, и Android был наиболее востребованным. Даже когда дело доходит до общего фидбека, всё, что касается Android, как правило, находится на вершине списка.

Игнасио рад объявить, что они наконец сделали это. Godot 3.2 будет поставляться с поддержкой экспорта игр на C# на Android.

Процесс экспорта игры для Android будет такой же, как если бы вы использовали GDScript. Godot добавит все сборки и зависимости в экспортируемый APK. Никаких дополнительных шагов от вас не требуется.

Он поддерживает все целевые ABI: armeabi-v7a, arm64-v8a, x86 и x86_64. В настоящее время используется только JIT, поддержка AOT появится в будущем.

Если вы не можете дождаться релиза 3.2 версии, то можете сами собрать Godot из исходников. Для этого вам также потребуется собрать среду исполнения Mono из исходного кода.

Если вы заинтересованы в сборке Godot с поддержкой C# из исходного кода, почитайте доки, описывающая этот процесс, а также специальный раздел про Android.

Игнасио создал репо со скриптами, чтобы помочь в процессе сборки среды выполнения Mono для Android. Возможно, вам придётся поставить некоторые патчи к репозиторию Mono, чтобы иметь возможность собрать его для armeabi-v7a и x86 в новых выпусках NDK.

Переписывание кода редактора для модулей в C#

За исключением C# привязок, большая часть кода C# модулей написана на C++. Сюда входит код редактора, отвечающий за создание проекта, открытие скриптов внешними редакторами/IDE и экспорт C# игры. Это является большим препятствием, поскольку C++ не только является языком более низкого уровня, но и доступное API также более ограниченно в использование (добавление сторонних библиотек — на самый лёгкий процесс).

До сих пор команда справилась с этим, переместив некоторые небольшие части кода в C#. Это позволило извлечь выгоду от .NET, где это было нужно. Однако это требует большого количества бойлерплейт-кода для вызова C# из C++.

Всё это в совокупности делает добавление новых функций в редактор гораздо более медленным и болезненным процессом, чем хотелось бы.

В прошлом месяце Игнасио работал над переносом большей части кода редактора на C#, чтобы его было проще поддерживать и расширять. Новый код имеет только один метод, который вызывается из C++, вызывающийся во время инициализации редактора. Все остальные вызовы C# из C++ обрабатываются существующей реализацией (сигналы, вызовы объектов и т. д.).

Интересно то, что новый код больше поход на аддон к Godot. Он использует то же самое C# Godot API и использование аддонов. Есть только два отличия с реальными аддонами:

  1. В отличие от других аддонов, этот не является частью вашего проекта и не отображается в Project Settings > Plugins. Вместо этого он включается модулем при загрузке редактора.
  2. Если вы загляните в код, то сможете заметить, что классы, производные от Godot.Object, не помечены ToolsAttribute. Это сделано намеренно, поскольку они предназначены для запуска в редакторе. Использование этого атрибута было бы излишним.

Было несколько багов, которые нуждались в исправление, чтобы всё работало правильно; особенно всё, что связано с горячей перезагрузкой. Поскольку это довольно важный аддон, эти исправления также полезны для других Godot аддонов и плагинов редактора, написанных на C#.

Была также улучшена система сборки. Самое важное: SCons теперь позаботится о создании C# API для связки с редактором Godot, шаг, который ранее выполнялся вручную.

Что дальше?

Следующим шагом является интеграция с MonoDevelop IDE. Более подробная информация появится в следующей статье, чуть менее, чем через месяц. Вы можете ожидать много ожидаемых функций, таких как отладка, а также улучшенный опыт при открытии файлов с помощью этой IDE (в настоящее время используется командная строка). Благодаря переписывания редактора, это будет гораздо проще.

Если вас интересует поддержка WebAssembly и iOS или интеграция с Visual Studio и VS Code, не беспокойтесь, это всё в планах.

P.S. видео с разбором от GameFromScratch: