Рубрика развивается при поддержке
Gamedev
Andrey Apanasik
1784

Поддержка 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 эмуляторе.

До сих пор 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 и использование аддонов. Есть только два отличия с реальными аддонами:

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

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

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

Что дальше?

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

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

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

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Andrey Apanasik", "author_type": "self", "tags": ["\u0438\u0433\u0440\u043e\u0432\u043e\u0439\u0434\u0432\u0438\u0436\u043e\u043a","\u0434\u0432\u0438\u0436\u043a\u0438","godot","gameengine","android"], "comments": 12, "likes": 50, "favorites": 44, "is_advertisement": false, "subsite_label": "gamedev", "id": 60307, "is_wide": false, "is_ugc": true, "date": "Sun, 21 Jul 2019 11:39:42 +0300", "is_special": false }
0
{ "id": 60307, "author_id": 1922, "diff_limit": 1000, "urls": {"diff":"\/comments\/60307\/get","add":"\/comments\/60307\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/60307"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
12 комментариев
Популярные
По порядку
Написать комментарий...
0

Отлично, C# внедрили, осталось всего лишь внедрить движок!

Ответить
5

тамошний 2д движок утрет нос юнитовскому псевдо 2д

Ответить
0

К сожалению еще не утрет, но все возможно, время покажет.

Ответить
0

Такс... Если 2D, то почему не кокос или гейммейкер, не конструкт или корона. Почему тогда юнити или огромное пустое дерево - Godot

Ответить
1

как-то скромно для мс. они явно побогаче эпиков будут, причем эпики никакого спец функционала от блендера не ждут, давая им $1,2 млн. а в случае с мс - явное продвижение и популяризация своего яп-а

Ответить
1

Эпики ГОРАЗДО больше вкладывают в различные гранты для разработчиков игр и прочего, потму что, логично занимаются играми/визуализацией. Для майков это третьестепенный рынок, где им надо они покупают гитхаб и выдают всем бесплатные приватные репы.

Ответить
0

Насколько я понял, этот грант был выдан лично Игнасио, а не всей команде.
This grant will be used to fund my work on C# in Godot for a year

Ответить
0

24к$ это копейки на год. В США средняя ЗП кодера 100к$ , этим 24к можно подтереться, а не дополнительно работать.

Ответить
1

Это не его з/п, а просто доп. финансирование.

В США средняя ЗП кодера 100к$

Только в крупных штатах типо Калифорнии. В некоторых регионах и 60к - норм з/п в ИТ.

Ответить
1

что всё равно не окупает даже пол года работы программиста на этот проект =) по факту это просто стимул, а не оплата труда

Ответить
0

Самый лучший стимул - это достойная оплата труда. Так что это точно не стимул. Подачка

Ответить
0

Если налоги MS на себя берёт, то для Испании вполне норм получается бонус. Хз почему вы вообще про США заговорили. Игнасио в Мадриде живёт.

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]