{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

(2 месяца + 125 долларов) ✱ 0 опыта = мобильная игра

Немного о нас

Всем привет, мы команда, которая решила сделать первые шаги в разработке мобильных игр. В команде два человека, Егор (23 года) и Даниэль (22). Знакомы мы уже 5 лет, с первого курса технического университета г. Москвы, название которого носит имя российского революционера*. Обучение информатики, а в частности программированию (Visual Basic) длилось в течение первого курса. Особого интереса данное направление у нас не вызывало, как и все обучение в целом. У нас были иные планы на жизнь…

Первые три года обучения прошли как у большинства студентов, но во 2-ом семестре 3-го курса начали появляться вопросы «А что ждет нас после университета? Куда мы попадем и чем будем заниматься?». У нас была летная практика (месяц неоплачиваемого труда в одной из компаний), после прохождения которой, особо не было желания связывать свое будущее с похожим родом деятельности, или по крайней мере не в наши лучшие годы (20 – 70 лет). Оценивая свои возможности, интересы и небольшой опыт мы начали искать ответы на эти вопросы. Впоследствии, на четвертом курсе, это вылилось в два проекта. Один из которых мы делали для одной крупной столичной компании, а второй – попытка создания стартапа с последующим участием в акселераторе и выступлением перед инвесторами (если Вам интересно, можем написать отдельную статью). Оба проекта не нашли поддержки (провалились).

Параллельно с реализацией второго проекта у нас возникла спонтанная идея (до конца 4-го курса этого не было в планах) продолжить обучение и поступить в магистратуру (исключительно на бюджетные места, которых было 5). Сдав вступительные экзамены, мы поняли, что без дополнительных баллов мы неконкурентоспособны и в срочном порядке опубликовали свои статьи в отечественные журналы разного уровня, прошли курсы повышения квалификации и придя к согласию с руководством университета получили несколько дополнительных баллов за первый проект. За короткий промежуток времени (около 3 недель) набралось 23 из 25 дополнительных баллов. Волею судьбы мы навсегда распрощались со стенами родного университета, с 6-м и 8-м местами в списке «зачисленных» на бюджет. Далее следовало полгода поисков направления для следующего проекта, которые пересекались с временными подработками. Желания найти постоянную работу в офисе «на дядю» не было (попытки были).

Рождение идеи разработки игр

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

Днями на пролет мы просматривали видео уроки, где программисты «на пальцах» объясняли азы программирования. В процессе усваивания информации промелькнула мысль отойти от разработки приложений и реализовать одну из наших давних идей о создании собственной мобильной игры, причем самостоятельно. Продолжив смотреть тематические видео уроки, мы выделили два возможных пути дальнейших действий. Первый предполагал углубленное изучение языка программирования (C#) и движка (Unity), с нуля (хоть в наших флешбеках и прослеживалась связь между С# и Visual Basic, но знания с первого курса просели сильнее цен на нефть) посредством теоретических материалов. Второй, выбранный нами, сразу перейти к практике, изучая только интересующие нас части кода.

Первые шаги в разработке

В процессе мозгового штурма (около 15 секунд) была придумана механика игры, удовлетворяющая всем нашим требованиям (простота разработки и 1 касание). По нашей задумке при старте игры мяч летит в произвольном направлении, задача игрока вовремя (когда мяч находится в определенной зоне) нажать на экран, тем самым изменив направление полета мяча (имитация отскока). Цель игры — набрать максимальное количество очков (1 успешный отскок = 1 очко). Игра считается проигранной, когда мяч коснётся стенки. Почему именно одно касание? Мы хотели создать игру, максимально подходящую каждому человеку, будь то подросток, решивший скоротать время в учебном заведении, будь то взрослый человек, решивший отвлечься от рабочего процесса в обеденное время. Тап по экрану – привычный жест для любого современного человека, что делает игровой процесс интуитивно понятным каждому.

Первоначально каждый из нас работал на своем компьютере, общались по видеосвязи. Ежедневно мы ставили нетривиальную задачу и соревновались, кто быстрее ее выполнит и разберется в неизвестной нам среде.

Одной из первых задач было создание движения мяча по вертикали (вверх-вниз).

                                                                  Анимация мяча

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

                                                                Анимация отскока

Сначала соревновательный процесс добавлял интереса нашему обучению, но как время приблизилось к разработке самой игры, мы приняли решение объединить усилия и работать на одном компьютере.

Разработка игры

Изначально реализация нашей задумки казалась простой. Так как мы приняли решение перейти сразу к практике, а не изучать теорию с нуля, нами была придумана практически беспроигрышная блок-схема, которой мы придерживались на протяжении всего процесса создания игры.

                                                                     Блок - схема

После выполнения второй «тренировочной» задачи было ощущение, что 70% игры уже готово, но как только мы решили сделать имитацию отскока мяча по нажатию, а не от стенки, выяснилось, что написанный код совершенно не подходит. Следующие несколько дней были потрачены во имя решения появившейся проблемы. В итоге были использованы лучи, которые на определенном расстоянии до стенок, отрабатывали нажатие и меняли соответствующую координату на противоположную.

                                                    Анимация игрового процесса

Удовлетворившись результатом перешли к созданию пользовательского интерфейса, а именно настроили счётчик очков, сделали главное меню (с одной большой кнопкой «Играть» и рекордом) и меню проигрыша (с двумя кнопками «Переиграть» и «Главное меню»). Также была настроена реклама (пропускаемый ролик, через каждые 4 поражения, и баннер на меню проигрыша).

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

                                                                 Меню проигрыша
                                                        Анимация главного меню

Промежуточный финал

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

После загрузки «финальной» версии на смартфон, нас не покидало ощущение, что игре чего-то не хватает. Также идея с минимальным количеством кнопок выглядела все менее привлекательно, казалось, что игра недоработана. Мы решили продолжать творить дальше.

Доработка и финал

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

Звук был добавлен в 2-х местах: при отскоке (в результате чего он стал более «физическим») и появлении панели проигрыша. С результатом можете ознакомиться, скачав игру.

Так как игра планирует охватить широкую целевую аудиторию, мы решили предоставить игрокам возможность выбрать понравившийся им мяч за 0.99$.

                                                                         Магазин

Как и во многих играх мы добавили кнопку восстановления счета после смерти. При нажатии на нее игрок просматривает не пропускаемый 30-ти секундный ролик и продолжает игру. Восстановление счета нельзя использовать два раза подряд. После добавления кнопки, появилось ощущение, что рекламы стало много, и мы решили увеличить интервал между пропускаемыми роликами с 4-х проигрышей до 5-ти.

Следующим шагом мы оценили внешний вид игрового интерфейса и увидели, что все наши кнопки имеют скругленные края, наш игровой объект круглый, а панель проигрыша и игровое поле имели острые углы. Сделав края скругленными и добавив полупрозрачную панель на игровое поле при появлении меню проигрыша, игра стала выглядеть более привлекательно.

                                                          До и после скруглений

По окончанию доработок (заняло около 2-х недель), мы получили полностью удовлетворяющую нас игру.

                                                             Анимация геймплея

Подготовка к публикации и ASO оптимизация

Планировалось выпустить игру сразу для двух платформ iOS и Android. Сама разработка велась на Android, но движок Unity позволяет нажатием пары кнопок быстро адаптировать под iOS. Совет новичкам, которые захотят пойти по нашему пути, в открытом доступе существует плагин, который позволяет внедрить сервисы Google Play и Game Center сразу, а не прописывать в коде каждый по отдельности. Подобные плагины (сразу для двух платформ) существуют для различных функций (например, кнопка поделиться рекордом, внутриигровые покупки и т.д.).

Чтобы опубликовать игру необходимо было зарегистрировать и оплатить аккаунты разработчика Google Play (25$ один раз) и Apple Developer (99$ в год). С регистрацией для Google Play не возникло трудностей, оплату приняли мгновенно, проверка заняла не более часа. А с регистрацией в Apple Developer пришлось повозиться пару недель, что было большой неожиданностью для нас. При вводе Apple ID и попытке присоединения к программе разработчиков, мы постоянно получали ошибку: «Your enrollment could not be completed. Your enrollment in the Apple Developer Program could not be completed at this time». Воспользовавшись поиском, мы обнаружили, что подобной проблеме уже более полугода (с ноября 2019). Столкнувшиеся с ней разработчики советовали поменять браузер и аккаунт, либо обратится в службу поддержки. Было перепробовано множество разных браузеров, Apple ID, компьютеров, провайдеров, но все попытки были тщетны. На этом наше разочарование не закончилось, мы решили обратиться в службу поддержки. К слову, вопрос с испорченной продукцией из одного столичного магазина мы урегулировали быстрее, чем «уговорили» мировую компанию принять от нас 99$. В ответ на наше обращение, где мы подробно описали суть нашей проблемы, спустя 2 дня, мы получили такой ответ:

                                                              Ответ и перевод

Мы написали ответное письмо с просьбой не подтверждать нашу проблему, а предложить пути решения. Спустя 10 дней мы так и не дождались ответа, хотя дублировали обращение в разные службы поддержки каждые два дня.

Мы решили данную проблему путем регистрации аккаунта разработчика через знакомого человека в Великобритании. Оплата и подтверждение были проведены в течении 2-х часов. Apple, так держать!

Заключительным этапом подготовки к публикации стало проведение ASO оптимизации. Так как в этой теме мы новички, сперва изучили материалы в этом направлении. Мы решили, что будем оптимизировать логотип, скриншоты и ключевые слова.

В изначальном варианте логотипа было решено схематично изобразить отскок мяча от стены. По началу он нас устраивал, казалось, что он отражает игровой процесс и будет понятен игрокам. После знакомства с ASO оптимизацией, мы узнали о значимости логотипа: два разных логотипа у одного приложения могут кардинально менять конверсию из просмотра в установку. В итоге мы разгрузили финальный логотип и сделали полет мяча более понятным. Какая из двух задумок Вам нравится больше?

                                                               Логотип до и после

Для скриншотов мы провели небольшое обновление: добавили рамку смартфона (только для Google Play, в App Store нельзя вставлять рамку устройства) и изменили порядок расположения на странице игры. Первыми должны идти скриншоты, отражающие игровой процесс и вносящие в него ясность, а все последующие – в порядке убывания значимости.

Наибольших усилий потребовала оптимизация ключевых слов. Мы выбрали 5 игр более-менее похожих на нашу. Из них 3 – популярные, 2 – набирающие популярность, и начали анализировать запросы, по которым они индексируются. При выборе ключевого слова мы ориентировались на его популярность и количество конкурентов. Было выяснено, что в App Store индексируются название, подзаголовок и ключевые слова, а в Google Play – название и описание. Так же в App Store локализации для разных стран пересекаются между собой: например, если мы сделаем локализацию для России, Австралии и Великобритании, то для российских пользователей будут индексироваться ключевые запросы Австралии и Великобритании и наоборот. Это позволяет увеличить количество символов ключевых слов от 100 (максимальное количество символов для одной локализации) до 500. Для увеличения охвата мы создали 9 локализаций для App Store (Россия, Великобритания, Австралия, Мексика, Испания, Италия, Германия, США, Франция, Корея, Япония) и 6 для Google Play (Россия, Испания, Италия, Германия, США, Франция). С русским и английским языком проблем не возникло, а остальные языки делали с помощью переводчика (не человека). Мы старались, честно, но за читаемость итогового варианта не отвечаем (от слова совсем), по поводу восточных иероглифов без комментариев… В приоритете было уместить максимальное количество ключевых запросов и сохранить какую-никакую связь.

Вы бы стали скачивать игру, где описание написано «коряво» и местами теряется связь между словами/предложениями?

Методы продвижения и заключение

Решено было использовать как платные, так и бесплатные методы продвижения. Среди платных планируем использовать рекламу в социальных сетях как в стандартном виде (публикация постов), так и в виде конкурсов с денежными призами. Среди бесплатных – написание статьи как в Российские (вы читаете ее сейчас), так и зарубежные площадки.

Суммарно было потрачено 2 месяца, из которых на разработку игры 4,5 недели. Каждый день написания кода и удачного внедрения очередной функции в игру доставлял нам неимоверное удовольствие, чего нельзя сказать о последующем решении организационных вопросов. В планах написать статью о промежуточных финансовых результатах после достижения 50-и тысяч скачиваний (или не достижения), и Вы, как никто, можете ускорить этот процесс, скачивайте и оценивайте нашу игру по ссылкам ниже!

Пойдет ли Flexy Ball вопреки правилам математики или обнулится?
1) (2 + 125) ✱ 0 = 1
2) (2 + 125) ✱ 0 = 0
Показать результаты
Переголосовать
Проголосовать

* находится на станции метро Бауманская

0
71 комментарий
Написать комментарий...
Art Grom

Попробовал. Не играбельно.
Из моего небольшого опыта создания игры (остановился на загрузке в Гугл плей)
1. 3 2 1 start это нудно. Лучше сделать старт игры по тапу (tap to start)
2. Играть сложно - частые проигрыши, нужно сделать рамку соприкосновения больше, но при этом саму зелёную область можно оставить как есть. То есть, нужно добавить небольшое опережение для улучшения механики.
3. Мяч летит в правый нижний угол, который перекрыт большим пальцем - Инна проиграна, так как мяч не видно.
4. Нужно добавить смысла, почему игра заканчивается, если мяч коснулся стены. Например - острые шипы по углам - значит мяч будет проколот.

Я закрыл игру где то после 19го проигрыша и просмотра второй рекламы, но закрыл бы раньше, если бы не было цели протестировать.

Реклама вроде как каждые 4 игры а не 5, как написано в статье.

Ответить
Развернуть ветку
Даниэль Самуэль
Автор

Здравствуйте Артур, благодарим Вас за такой подробный и конструктивный отзыв. Сейчас прокомментируем каждый из Ваших пунктов:
1) У нас была идея сделать начало игры по тапу, но отказались от нее в силу того, что игрокам, которые играют впервые, игра может показаться еще сложнее (Игрок заходит, нажимает на экран для старта и мяч мгновенно куда-то летит, это бы вводило его в некое растерянное состояние). Плюс немного сумбурно выглядела бы надпись «как играть» и надпись «начала игры» (tap to start и tap when the ball in...)
2) Мы специально делали игру немного сложной, чтоб она цепляла игроков и заставляла их возвращаться. Но мы подумаем еще над ее сложностью. Если бы был выбор скорости движения шарика, то вы бы стали в нее играть?)
3) На это, к сожалению мы не в силах повлиять, возможно поможет поменять размер игрового поля, но на наш взгляд это плохо скажется на визуальной составляющей. Когда мы тестировали игру, то нажимали по центру с левой или правой части экрана (зависит от того, правша Вы или левша)
4) Тоже думали внести некую реалистичность в игру (в том числе и про шипы), но решили делать игру в минималистическом стиле. Но если Вы, как игрок, это заметили, то пересмотрим этот вопрос)
5) Сейчас протестировали на двух Android устройствах и реклама показывалась строго после пятого поражения (в коде написано также)
Сколько Вам максимум удалось набрать очков за 19 попыток?)

Ответить
Развернуть ветку
Art Grom

По рекламе проверил, да, после 5 игр реклама.
Максимум 11 очков, но в основном проигрыш сразу при старте.

1) Можно сделать кнопочку START, а объяснение как играть написать сверху где-то. То есть, когда вы нажали рестарт, то вместо отсчета 3 2 1 пишете инструкцию, как играть, а ниже кнопку START. 4 секунды ждать реально долго, учитывая что в основном игра идет 2 секунды :) (проигрыш сразу при старте)
Также второй вариант - оставить как есть, но при тапе - принудительно начинать игру, не дожидаясь окончания таймера.

2) Flappy bird была сложной, но там рестарт игры происходил мгновенно и по сути игра была бесконечной. То есть, проиграл, нажал кнопку и снова играешь. У вас же, игра идет 2-3 сек (ведь вы сделали ее сложной), а потом нажать рестарт и ждать еще 4 секунды.

Еще, если мяч попал в угол (но не строго), то игрок обречен, так как нужно умудриться нажать 2 раза и непонятно с каким промежутком.

Из того, как можно улучшить.
01. Добавить 3 жизни (при сгорании жизни - защитная зона становится красной),

02. Уменьшить размер мяча, сейчас он очень огромный. Возможно, при уменьшении будет большая задержка от стены до стены и играть станет удобнее.

03. Ввести несколько уровней защитной зоны, например, Perfect и Normal и анимировать саму защитную зону. То есть, в зависимости от того, когда игрок сделал тап и насколько опасно к проколу был мяч. Чем больше опасность - тем больше Perfect очков.

Может это хоть как-то улучшит плохую механику игры. Игра не играбельная и не доставляет удовольствия. Исправить это можно только экспериментальным путем.
Мы свою игру кодили 2 дня, а настраивали еще неделю до нормальной механики.

Ответить
Развернуть ветку
Даниэль Самуэль
Автор

Артур, большое спасибо за Ваши подсказки и советы) Касательно попадания мяча в угол: в ситуациях когда мяч летит не совсем в угол, нужно нажимать в последний момент (когда мяч касается сразу двух зелёных зон) и мяч отлетит от угла =)

Ответить
Развернуть ветку
68 комментариев
Раскрывать всегда