Godot: прогресс по C#, поддержка iOS и сигналы

Godot: прогресс по C#, поддержка iOS и сигналы

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

Поддержка 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:

signal text_changed(text)

Код может взаимодействовать с сигналами через методы connect, disconnect и emit_signal. Сигналы также доступны из редактора Godot, где могут быть созданы новые связи.

Эквивалентом объявления сигнала в C # является объявление делегата с атрибутом Signal. С ними можно взаимодействовать, используя вышеупомянутые методы.

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

В прошлом месяце, мотивированные новым типом Callable, разработчики решили переосмыслить реализацию сигналов в C #. Цель на этот раз — представить их как события. Всё это пока ещё в процессе, но первоначальные результаты выглядят великолепно.

Godot: прогресс по C#, поддержка iOS и сигналы

Сравнение старого и нового стиля:

// Старый стиль class TextField : Node { [Signal] delegate void TextChanged(string text); void Foo() { Connect(nameof(TextChanged), this, nameof(TextChangedCallback)); EmitSignal(nameof(TextChanged), "bar"); } void TextChangedCallback(string text) { /* ... */ } } // Новый стиль class TextField : Node { delegate void TextChangedHandler(string text); [Signal] event TextChangedHandler TextChanged; void Foo() { TextChanged += TextChangedCallback; // TextChanged?.Invoke("bar"); // Nope, not yet :( EmitSignal(nameof(TextChanged), "bar"); } void TextChangedCallback(string text) { /* ... */ } }

Как видно из примера, самая важная отсутствующая часть — это поддержка события. Прямо сейчас вызовается только делегат события, но не будет заэмичен сигнал, что важно для уведомления обработчика и слушателей GDScript. Таким образом, команде всё ещё нужно использовать классический вызов EmitSignal, который будет эмитить сигнал и вызывать событие. Потребуется дополнительная работа для поддержки сего дела.

Что дальше?

На следующей неделе анонсируют расширение Godot для Visual Studio и VS Code.

6363
22 комментария

Отличная новость. Мобильный гейминг over everything.

5

Код может взаимодействовать с сигналами через методы connect, disconnect и emit_signal.

Где-то я такое уже видел.

2

Так это Событийно-ориентированное программирование. Просто в Godot есть визуальный конструктор для этих самых событий.

8

Комментарий недоступен

2

Комментарий недоступен

7

Зачем это вообще кому-то нужно?Достаточно попробовать Godot, чтобы понять, что у этого движка весь процесс создания игры отличается от Unity. Как по мне, он ближе к GameMaker.

Для хобби проектов, чтобы подойти к разработке со свежим взглядом (например, не так как в Unity) — самое то.

1

У каждого инструмента есть как плюсы, так и минусы. В чем неоспоримое преимущество юнити перед годо?

работает по определению быстрее

Это что за определение такое?