Провал длиною в год, или опыт разработки игры под Android

в 17:02, , рубрики: android, game development, unity3d, метки: , ,

Привет, читатели!

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

Предыстория

Какое-то время назад в течение двух лет я разрабатывал игры под Windows Phone. За это время было выпущено 6 игр, только 2 из них были платные + триал и принесли всего лишь несколько долларов, остальные были бесплатные без рекламы. Разрабатывал игры под эту платформу, потому что там был XNA + C#, мне очень нравилась эта связка, но потом пошли слухи, а затем и реалии о том, что поддержка XNA прекращается. Начался поиск других движков, среди которых больше всех мне приглянулся Unity. Сразу говорю, что не хочу спорить о целесообразности его использования для маленьких игр, меня здесь все устраивает, даже если в других движках есть редактор, C#, кросплатформенность и т.п. На тот момент поддержки Windows Phone в Unity еще не было, но меня это не смутило, т.к. разрабатывать под эту платформу мне больше не хотелось, по крайней мере пока (как сказал один знакомый, зачем ездить на дохлой лошади). Говоря откровенно, мои игры были слабенькие, но выбор был сделан. Подписка разработчика Windows Phone была закрыта, началась новая полоса изучений, прохождения туториалов и, собственно, разработки игр.

Выбор игры, начало

Как известно, нельзя начинать со сложного. По этой причине для пробной игры была выбрана идея, которую я уже начал реализовывать под Windows Phone, а именно – головоломка в стиле Братьев Пилотов (скриншот), но с немного другой механикой. В моей игре при щелчке на объекте состояние переключается не у всего ряда и всего столбца, а только у выбранного объекта и у соседних объектов (вверху, внизу, слева, справа). Для визуального отображения эффекта переключения было решено использовать непосредственно включение или зажигание, а что может гореть? Звезды! Потому название Shining stars было выбрано достаточно быстро. Началась разработка.

Стоит сказать, что бюджета не было ровным счетом никакого. Поэтому все предполагалось делать самостоятельно – программирование, графика, продвижение и т.п.

Разработка

Здесь не было практически никаких проблем. Функционал и механика достаточно простые, потому основу я сделал очень быстро и легко. Пришлось помучиться лишь с разными эффектами в виде вращения, скейлинга, слайдинга и т.п.

Вращение – в Unity есть методы для вращения объектов. Но если честно, работают они для меня порой странно, потому отчасти я просто тыкал наугад и искал вариант, который меня устроит.

Слайдинг был реализован на экране выбора уровня. На экране выводилась лишь часть иконок с уровнями (размер части зависит от размера экрана), остальные отображаются при переключении кнопками «влево» и «вправо».

Скейлинг тоже оказался достаточно простым, как только я в нем разобрался. Основная идея – игра должна выглядеть хорошо на всех размерах экранов. В сети не очень много уроков на эту тему, в основном пришлось изучать форумы. Кстати, сразу хочу посоветовать начинающим пользователям Unity идти на их английский форум, он очень живой, люди всегда стараются помочь, в отличие от большинства русскоязычных форумов различной тематики. В итоге пришел к варианту, при котором за основу выбирается определенный размер экрана, далее считается коэффициент относительно реального размера экрана телефона или планшета. Все игровые объекты меняют масштаб и положение в зависимости от этого коэффициента. Лично у меня коэффициент был не один, т.к. разные типы игровых объектов пришлось масштабировать по-разному из-за того, что они по-разному воспринимались на разных экранах. Какие-то объекты на маленьких экранах можно было оставить в стандартном размере, другие надо было немного увеличить относительно первых.

Уровни

В самом-самом первом варианте игры я хотел сделать 20 уровней. Мда, интересная была бы игра. По мудрому совету это число было расширено до ~100 (в планах). Конечно, придумывать уровни самому и проверять, решаемы ли они, мне совсем не хотелось. Я же программист, так зачем издеваться над собой! Через некоторое время был готов генератор, который выдавал все возможные комбинации уровней заданного размера, затем проверял, решаем ли уровень, и выводил его в текстовый файл. Тут-то и была самая большая моя проблема в этой игре. Если при размере игрового поля 4*4 количество уровней измерялось десятками тысяч, то для поля 5*5 уже были миллионы, для поля 6*6… Ну, вы поняли. Да, я программист, я могу написать генератор, могу научить его решать уровни, но я не могу научить его выбирать, какой уровень красивый и войдет в игру, а какой будет отсеян. Потому все эти миллионы уровней нужно было просмотреть, вручную выбрать нужные. Я даже сначала попытался, но потом прикинул масштабы действия (а я хотел сделать игровое поле аж до размера 10*10) и стало мне дурно.

Как ни крути, а пришлось вернуться к ручному рисованию различных узоров. Эти узоры вносились в игру, решались лично мною на моем же телефоне (одновременно проверка решаемости + эстетическое удовольствие от решения уровня). Нерешаемые уровни дорабатывались, неинтересные выбрасывались. И через некоторое время у меня было готово 120 уровней, расположенных в порядке возрастания их размера и сложности в пределах размера.

Пример создания уровня

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

Число 120 было выбрано неслучайно. На разных размерах телефонов на экране выбора уровней можно вместить разное число иконок этих уровней. При цифре 120 я получилось разбить иконки на группы с одинаковым числом иконок в каждой, что немаловажно. Мне не хотелось, чтобы на первых страницах было по 12 иконок, а на последней всего лишь, например, 10.

Графика

Графика в моей игре прошла, на мой взгляд, целую эволюцию! Изначально я хотел сделать игру очень быстро и выпустить «то, что есть» с теми 20 уровнями. И это «то» сначала мне казалось действительно неплохим, но получив пару советов от других людей, я сильно задумался и стал все перерисовывать. За основу были взяты различные знаменитые игры, например, Angry Birds, из которых я взял идею внешнего вида UI, расположения иконок уровней при их выборе.

Старый вариант графики
Главное меню с двумя вариантами кнопок. Конечно же, после первого второй казался прекрасным! До тех пор, пока не был сделан финальный фариант.
Провал длиною в год, или опыт разработки игры под Android

Провал длиною в год, или опыт разработки игры под Android

Окно информации об игре
Провал длиною в год, или опыт разработки игры под Android

Окно выбора уровня
Провал длиною в год, или опыт разработки игры под Android

Чтобы игра не казалась мертвой, появилась идея сделать в ней что-то, что давало бы обратный эффект. Такой идеей стал живой фон игры – если немного приглядеться, звездное небо на фоне – это не просто картинка, на нем мигают другие цветные звезды (синие, желтые и бледно-желтые), а периодически даже пролетает падающая звезда! Да, этот эффект не тянет на оригинальность и новизну, но я считаю, что получилось неплохо и помогло создать нужную атмосферу в игре.

Финальный вариант графики

Главное меню с раскрытыми кнопками настроек (чтобы не загромождать экран, изначально они свернуты и открываются с помощью нажатия на кнопку настроек)
Провал длиною в год, или опыт разработки игры под Android

Окно информации об игре
Провал длиною в год, или опыт разработки игры под Android

Окно выбора уровня
Провал длиною в год, или опыт разработки игры под Android

Окно с уровнем в процессе игры (один из вариантов фона; всего их 3, выбираются случайным образом)
Провал длиною в год, или опыт разработки игры под Android

Внимание уделялось абсолютно всему. Игровые объекты улучшались, чтобы быть красивыми. Объекты UI (кнопки, иконки уровней) совершенствовались, чтобы быть и красивыми, и интуитивно понятными только по их картинке. Даже для иконки было разработано несколько вариантов, из которых с трудом был выбран финальный, а впоследствии заменен на еще один, который казался мне более подходящим. А сколько раз я перерисовывал все тексты!

Иконки

Начальные варианты для выбора
Провал длиною в год, или опыт разработки игры под Android

Финальный вариант
Провал длиною в год, или опыт разработки игры под Android

В компоновке графики мне очень сильно помогла программа TexturePacker, настоятельно ее рекомендую! Ее бесплатных возможностей вполне хватает для наших целей, а атласы она собирает действительно неплохо. Мною было подготовлено несколько атласов – один для кнопок и два набора для игровых объектов (с локализацией на русский и английский языки). Правда, в старой версии Unity мне пришлось вырезать нужные куски с помощью uv-координат, что несколько неудобно. В новой версии Unity все можно сделать гораздо проще с помощью спрайтов.

Звуки и музыка

Здесь нет никаких проблем. Существует множество ресурсов, где звуки можно купить или взять бесплатные. Т.к. бюджета не было, я выбрал несколько подходящих звуков и мелодий, которые эти ресурсы позволяют скачать бесплатно, т.е. все абсолютно законно и без воровства (да, для меня это важно).
Основная идея была – создать спокойную обстановку, в которой игрок может подумать с тихой музыкой на фоне. Но первый же апдейт игры поменял ситуацию – была добавлена более ритмичная музыка с возможностью выбора нужной мелодии (спокойной или быстрой) в настройках.

Релиз, продвижение, результаты

Отмечу, что игру я собирался выпускать только под Android, т.к. у меня есть соответствующий телефон, но нет устройств iOS, на которых я мог бы потестировать игру, а выпускать без реального теста я не хочу. Так же поводом послужило то, что регистрация в Google Play – это разовый платеж 25 долларов, а в Apple нужно каждый год платить 99 долларов. Возможно, я выпущу игру и под iOS, но несколько позже.

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

На данный момент количество загрузок очень мало. Я догадывался, что будет некий провал, но настолько… Отчасти это связано с тем, что я выкладывал на форумах не только ссылку на Google Play, но и сам apk файл, причем судя по статистике, его загрузки превышают загрузки игры из маркета.

Игра бесплатная. В качестве монетизации был выбран показ рекламы. В процессе разработки я хотел подключить несколько модулей – если не получилось отобразить один, показывать второй и т.д. Первым был подключен известный Chartboost, далее пытался подключить RevMob и PlayHaven, но с ними вышли некоторые заминки (откровенно, они не заработали в игре, причину я так и не выяснил), потому остался только один модуль, от которого и должен был идти весь доход. Но если учесть вышесказанное (количество загрузок и желание пользователей кликать рекламу или ставить рекламируемые игры), вы понимаете, что дохода-то и нет.

Выводы

Как говорят, плохой результат – тоже результат. С момента начала разработки на Unity (время на Windows Phone не считаю) до релиза прошло около 14-15 месяцев. По-хорошему, такая игра пишется за месяц неполной занятости, и то это с запасом. Причина была в нехватке времени. Нет, времени было достаточно – пара часов по вечерам, несколько часов на выходных вполне хватало, чтобы продолжать делать игру без длительных пауз. А не хватало мне морального самочувствия. В этот период было очень много личных проблем, при этом было желание делать игру, были идеи, но я садился за компьютер, тупо смотрел в монитор, затем понимал, что у меня нет вдохновения, что я не могу реализовать абсолютно ничего, и выключал его. Так и пролетел этот год.

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

Но положительных моментов, наверное, больше. В первую очередь, это опыт! На этой игре я изучил основные возможности Unity с одной оговоркой – игра разрабатывалась на старой версии, где еще не было 2d. Сейчас 2d игры можно разрабатывать с этой новой технологией, потому большинство моих наработок из игры уже могут не понадобиться.

На этой игре я понял, что графика действительно важна! Не надо об этом забывать, никогда! Если бы я выпустил игру с первыми вариантами дизайна, мне было бы стыдно за него. Сейчас я выпустил красивую игру. Да, она провалилась, но я все равно горжусь ей! Если есть бюджет, можно нанять хорошего дизайнера. Если нет, то перерисовывать все снова и снова до тех пор, пока результат не будет действительно стоящим.

Думаю, что единственной крупной ошибкой, которую я здесь допустил, это выбор жанра игры. Наверное, большинство игроков любят экшены, аркады, может что-то еще, но не очень любят головоломки такого типа. Люди видят мою игру, кому-то может не понравиться графика, а кто-то отсекает ее из-за жанра. И если говорить о следующей игре, которую я бы разрабатывал, я бы поменял только жанр, все остальное сделал бы так же!

Автор: Maklaud

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js