Переход из мобильной разработки в мир геймдева или почему я выбрал Godot C#
Год назад, когда я столкнулся с тупиком в мобильной разработке приложений я принял решение попробовать новую для меня область — геймдев. Мои эксперименты с различными движками привели меня к Godot C#. Этот движок выделялся для меня своей удобностью, как в языке программирования, так и в структуре сцен. Хотя, конечно, были и другие кандидаты, такие как Unity. Но загрузка проектов там казалась бесконечной, а их вес — чем-то невероятным. В результате выбор пал именно на Godot C#.
Первый шаг в геймдев: планы, препятствия и Steam
Когда я начинал свой первый проект, планы были довольно простыми. Я хотел создать сайдскролл-шутер в космической тематике с интересным сюжетом. Но, когда был уже близок к завершению, выяснилось, что из-за отсутствия экспортных шаблонов для мобильных устройств, моей игре пришлось отложить свой мобильный дебют. Это подтолкнуло меня рассмотреть другие возможности, и я остановил свой выбор на Steam.
Проблема была в том что я в основном предыдущие годы концентрировал свое внимание на разработке и отладке именно под мобильные устройства и перспективы разработки под ПК слегка устрашали из-за того насколько незнакомым для меня было это. В последствии отсутствие знакомства с данной платформой привело к многим трудностям, но это позволило сделать то что на мобильном устройстве я бы сделать не смог.
Регистрация в Steam. Виртуальные карты, трудности оплаты и подтверждения личности
Не буду вдаваться в подробности всех трудностей, с которыми столкнулся, создавая свой аккаунт разработчика на Steam. Расскажу лишь о самых важных моментах. Основная часть регистрации не вызвала серьезных затруднений, но с оплатой взноса возникли некоторые сложности из-за ограничений. Их удалось решить с помощью виртуальных карт хоть и пришлось повозиться (к сожалению они недавно приказали долго жить из-за изменения банковского законодательства Турции потому повторить это скорее всего не получится) . После завершения регистрации пришлось несколько раз отправить фотографии для подтверждения личности в налоговой, по какой-то причине они не могли подтвердить адрес какое-то время но в целом регистрация прошла успешно.
Отсутствие интереса к первой идее и спешный переход на вторую
После многих часов, вложенных в создание моей игры, я оказался перед горьким осознанием: либо подобные игры не привлекают внимание аудитории Steam, либо они не подходят для новичка в рекламной области, такого, как я. Это стало очевидно после публикации страницы в Steam, посещения и вишлисты были катастрофически низкими. Этот факт заставил меня временно приостановить свой проект. Передо мной встала задача найти что-то более оригинальное и, в то же время, способное привлечь больше внимания.
Меня всегда манила идея питомцев и помощников, живущих прямо на рабочем столе, как это реализовано в Shimeji. Однако, я почувствовал, что есть возможность пойти дальше, внести свежий взгляд и добавить разнообразные механики, чтобы создать нечто новое. К примеру боевую систему с мышью, на подобии того что было в Animator vs Animation, где питомец мог бы хватать и таскать мышь, бить мышь об края экрана и атаковать ее чем-нибудь.
Начало проработки механик питомца и проблемы с окнами
На старте разработки, вместо единого оверлейного окна, на весь экран бегало множество маленьких прозрачных окон, каждое из которых привязано к отдельному объекту. Идея казалась интересной, но вскоре возникли трудности. Проблемы с точным позиционированием стали неотвратимыми, так как окна не имели возможности занимать точные положения в пределах пикселя. К тому же, это множество маленьких окон создавало нежелательные перекрытия, мешая пользовательскому взаимодействию с ПК. Дополнительной проблемой, с которой я столкнулся в процессе проработки данного метода были сложности с взаимодействием питомца и предметов. В момент, когда виртуальный спутник приближался к объектам, возникала проблема перекрытия окон, что приводило к нежелательным искажениям. Потому было принято решение ограничиться окном, размер и позиция которого устанавливались сразу после запуска.
Интерес к второй идее после публикации страницы
Так же, как и в первый раз, после тщательной работы над трейлером и создания страницы, я выложил проект для оценки реакции и эффективности идеи. Удивительным образом, второй проект превзошел по количеству вишлистов первый всего через пару дней после публикации, в то время как первый проект уже находился в сети несколько месяцев.
Таким образом, я решил продолжить работу над этим проектом. На момент опубликования страницы все механики, связанные с питомцами, были проработаны, хотя отсутствовали некоторые важные элементы, такие как сохранения, импорт шаблонов, Workshop и пользовательский интерфейс.
Перенос выпуска
Изначально в мои планы входило выпустить игру к середине ноября но я решил поторопиться и выпустить игру к началу хэллоуинских распродаж добавив скидку при выходе. Пришлось ускорить разработку но в результате я все успел. В итоге Desktop Pet Project вышла 26 октября, причем я до последнего момента дорабатывал механики и интерфейс. На удивление сразу со старта было весьма неплохое количество продаж и сообщения в раличных местах сообщества позволили предположить что игрокам действительно нравилось то что они видели, пока не пришел первый обзор.
Отсутствие информации и проблема черного экрана
Первым отзывом был негативный отзыв, у игрока вместо прозрачного фона был черный экран. Эта ситуация внесла некоторую путаницу, так как я не мог понять, что могло вызвать подобные неполадки. Обратная связь в сообществе и количество возвратов позволили предположить, что данная проблема возникает у приблизительно 10% игроков. В тот момент я чувствовал себя на распутье, так как полностью терялся в поиске корня проблемы, и, конечно же, в начале своего поиска я выбрал абсолютно ошибочное направление. Я решил попробовать полностью заменить метод создания прозрачного окна.
Блуждание в поисках и поворот не туда
В современном Windows как я понимаю есть два способа сделать окно прозрачным, один через слои, он современный, позволяет с точностью до пикселя указать какой цвет из окна удалять и позволяет взаимодействовать только с тем что отображается. Второй устаревший, его использовали для создания эффекта блюра у окон. Изначально я использовал первый метод. Просто сделать прозрачное окно вторым методом весьма просто, проблемы начинаются когда человек хочет сохранить возможность воздействовать на то что располагается за окном. Это заняло у меня неделю и я добавил заветную Failsafe Background Mode галочку в настройки игры. К тому моменту я уже связался с человеком у которого была проблема черного экрана и попросил его проверить последний билд. Открыв игру и активировав функцию проблема осталась неизменна. Это был момент в который я понял что путь к решению проблемы потребует дополнительных усилий и исследований.
Обнаружение странных особенностей драйверов последних версий и 50% эффективность
В результате многочисленных исследований я пришел к определенному выводу. Когда я обновил драйвера видеокарты до последней версии я сам столкнулся с этой проблемой.
Как оказалось, в последних версиях драйверов Nvidia и AMD в windows была поломана прозрачность окон vulkan с включенной вертикальной синхронизацией. Не знаю причин этого и когда это устранят но оказалось что решение проблемы как я тогда думал заключалось в переводе проекта на opengl и отказа от вертикальной синхронизации. Учитывая движок что я использую это заняло пару кликов. Загрузив последний билд я попросил человека с проблемой черного экрана проверить его. Проблема у него осталась.
Абсолютное непонимание и внезапная догадка
Судя по сообществу у существенной части людей проблема была решена, но не у всех. Я экспериментировал с многими версиями драйвера который был установлен у них но это ни к чему не привело, у меня черный экран больше не появлялся. Исследования заняли еще пару дней. В очередной раз просматривая несколько скриншотов разных людей с проблемой я обнаружил странную связь.
Это позволило сделать вывод: проблема возникает только на ноутбуках с дискретной видеокартой.
Учитывая предыдущие неполадки с драйверами, я пришел к выводу, что проблема с прозрачностью окон на ноутбуках, вероятно, более глубоко заложена и ее нельзя просто исправить переходом на opengl или настройками вертикальной синхронизации. Этот баг возникал исключительно с дискретными видеокартами Nvidia и AMD в ноутбуках. Тогда мне пришла в голову идея: ведь в большинстве ноутбуков есть встроенная видеокарта, не являющаяся дискретной. Почему бы не попробовать переключить запуск игры на нее? Учитывая небольшой объем игры, встроенная видеокарта должна быть вполне способна справиться с ее запуском, что, в свою очередь, снизит нагрузку на игровую GPU и энергопотребление. Решив следовать этому пути, я добавил дополнительный метод запуска в Steam с аргументом, который принудительно устанавливал использование встроенной видеокарты. Проверив как оно работает я загрузил билд. После того как я попросил проверить билд мне был выслан скриншот. Вместо черного экрана наконец показался рабочий стол и все работало как надо. Это был долгий путь но в итоге проблема была решена.
Решение проблемы заняло две недели, после чего впервые после выпуска я решил немного отдохнуть.
Выводы:
Если кому интересно вот ссылка на Desktop Pet Project
В конечном итоге Desktop Pet Project стал для меня не просто игрой с питомцами, но и уроком о том, как интересно может быть изучать новое, даже если по пути приходится решать нестандартные проблемы. В современном мире веселье находится даже в вызовах, а каждый найденный фикс это шаг к интересным и необычным проектам.