Godot: прогресс по C#, поддержка iOS и сигналы
Первоначально, и в течение некоторого времени, C # поддерживался только в Godot на десктопах. В прошлом году команда добилась значительных успехов в расширении поддержки Android и WebAssembly, а теперь пришло время добавить и iOS в этот список. В этом отчёте также представлен новый способ работы с сигналами Godot в C #.
Поддержка iOS
Демка Dodge The Creeps C # в iOS-симуляторе.
Godot 4.0 получит поддержку C # в iOS. Также планируется включить и в версию 3.2.x; может быть уже в 3.2.2, если всё пойдет хорошо.
Как и в случае с WebAssembly, Mono JIT компилятор недоступен на iOS устройствах. Вместо этого Godot выполнит Ahead-of-Time (AOT) компиляцию при экспорте игры, и полученные библиотеки будут добавлены в сгенерированный Xcode проект.
Помимо дополнительного времени, которое тратится на компиляцию AOT сборок, процесс экспорта должен быть таким же, как и в играх, не использующих C #.
Для тех, кто заинтересован в сборке Godot из исходного кода, код доступен в ветке 3.2-mono-ios (скоро будет слит в ветку 3.2). В настоящее время master ветка не поддерживает многие платформы (включая iOS) из-за постоянной работы над рендерером. Страница Compiling with Mono содержит информацию о сборке среды выполнения Mono, библиотеки базовых классов и кросс-компилятора AOT.
Сигналы как события
Сигналы — это Godot версия паттерна наблюдателя. Классы движка используют сигналы для уведомления слушателей, когда происходит событие. Пользовательские скрипты также могут создавать свои собственные сигналы.
Примерно так выглядит объявление сигнала в GDScript:
Код может взаимодействовать с сигналами через методы connect, disconnect и emit_signal. Сигналы также доступны из редактора Godot, где могут быть созданы новые связи.
Эквивалентом объявления сигнала в C # является объявление делегата с атрибутом Signal. С ними можно взаимодействовать, используя вышеупомянутые методы.
В .NET распространенным способом реализации шаблона наблюдателя является использование событий. На фоне событий C # код, использующий сигналы Godot, выглядит чуждо.
В прошлом месяце, мотивированные новым типом Callable, разработчики решили переосмыслить реализацию сигналов в C #. Цель на этот раз — представить их как события. Всё это пока ещё в процессе, но первоначальные результаты выглядят великолепно.
Сравнение старого и нового стиля:
Как видно из примера, самая важная отсутствующая часть — это поддержка события. Прямо сейчас вызовается только делегат события, но не будет заэмичен сигнал, что важно для уведомления обработчика и слушателей GDScript. Таким образом, команде всё ещё нужно использовать классический вызов EmitSignal, который будет эмитить сигнал и вызывать событие. Потребуется дополнительная работа для поддержки сего дела.
Что дальше?
На следующей неделе анонсируют расширение Godot для Visual Studio и VS Code.