Инди Sashka Ch
1 120

Загадки — мобильная игра своими руками

История создания мобильной игры от идеи до релиза одним человеком. Кровь, пот и пиксели из первых рук. Как сказала Ивлеева Дудю: «Погнали!»

В закладки
Аудио
Начало викторины в Paper Mario Color Splash

Вдохновение

Всю сознательную жизнь я играл в интеллектуальные игры и как-то раз попалась в мой телефон игра Little Riddles от американской студии Juxta Labs.

Скриншоты игры Little Riddles

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

На чём пишите?

В качестве движка выбрал Unity, у него удобная модель мира, магазин ассетов, большое сообщество и возможность делать сборки под Android и iOS. Mono показалось сухой, вместо неё использовал Rider. Еще помогали Photoshop, SourceTree и Google-документы.

Медленное прототипирование

Прототип создавался гомеопатическими дозами, по 1-2 часа в день, да и то не каждый день. Первая играбельная версия появилась через 6 месяцев, в ней была основная логика по работе с буквами, все виды подсказок и первые три десятка загадок.

Это мой первый проект на Unity, я решил, раз игра почти текстовая, то для реализации хватит UI-части движка. Когда начал писать код, для меня естественным было всё делать за компьютером — и программировать, и тестировать игру. Здесь скрывались первые грабли...

В результате, только спустя полгода разработки, когда был готов базовый движок игры и анимации, я первый раз установил приложение на реальный телефон.

Каково же было моё удивление, когда игра, которая так классно работала на компьютере — ужасно тормозил на телефоне. Наверно, похоже чувствовали себя разработчики Batman Arkham Knight после релиза на ПК.

Скриншоты первого прототипа Загадок

Сначала я подумал, что я — человек-снежинка, но форумы сообщили, что UI движка не оптимизирован для мобильных устройств. Вот так просто и так грустно : )

¯\_(ツ)_/¯

Пришлось визуальную часть, а это большая часть кода, переписать с нуля на NGUI, это плагин к Unity для создания интерфейсов. Он менее удобен, чем UI движка, но зато основан на физике и, главное, быстро работает на мобилах. Наученный горьким опытом, работу плагина я протестировал на айфоне до начала разработки — NGUI «летал».

Совет

Делайте синтетический тест до начала разработки.

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

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

Совет

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

В качестве такого эталонного телефона выбрал iPhone 5s.

Дизайн

Сначала дизайна в игре не было вообще, это ок. Потом я сделал его сам и он мне долгое время нравился.

Дизайн игры Загадки, версия «сделай сам »

Пока за пару месяцев до релиза я не понял, что он устарел. В результате нанял дизайнера, которая сделала всё стильно модно современно. Но релиз это отодвинуло еще на месяц-два. Что тут можно сказать...

Совет

Знаете, как улучшить игру — улучшайте, но в разумных пределах.

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

Финальный дизайн игры

Главное здесь — не впадать в крайность и не затягивать процесс выпуска игры. Где проходит эта грань — каждый решает сам: Nintendo, например, может годами делать очередной мега-хит, сдвигать сроки релиза или вообще их не сообщать; Эрик Барон, автор Stardew Valley, в течении 4 лет делал и переделывал игру, пока не получилась версия, которая его устраивала; у автор платформера Owlboy ушло на разработку 8 лет.

Шрифты

Почти сразу решил, в Загадках все будет честно и лицензию на шрифты я либо куплю, либо стану использовать бесплатные. К слову сказать, всю дорогу я использовал пару начертаний Helvetica, а дизайнер добавила Avenir на главную.

Проверка показала, оба этих шрифта — платные, а лицензия для мобильных устройств стоит в 10 раз дороже, чем для компьютера. Порядок цен такой: одно начертание одного шрифта для ПК стоит $89, а для мобилок — $890.

Окей, пошёл в Google Fonts, долго искал замену, которая бы понравилась и буквами и цифрами, затем кропотливо переделывал все шрифты в игре на понравившийся бесплатный Montserrat. Изменения экранов, верстка текста и тестирование заняли у меня еще недели две-три.

Совет

Со шрифтами лучше определиться на берегу.

Смена шрифтов на переправе ведет к тому, что придется менять верстку всех экранов, подбирать наилучшее начертание для смартфонов и т.п.

Анимации

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

Совет

Любые объекты должны появляется на экране плавно, так приятнее.

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

Базовые анимации игры

Звук

Если сами не пишете музыку, то звуки для игры лучше покупать или скачивать наборами. Звуки из набора будут звучать друг с другом цельно и гармонично. Я в итоге купил один набор звуков и скачал несколько роялти-фри паков.

Еще из интересного — оказалось, что часть привычных нам звуков в приложениях — это звуки, издаваемые человеческим ртом. Различные смахивания, чпоки, вжухи, нажатия на кнопки и т.п.

Снова

Создание законченного продукта, даже для такой простой игры — дело непростое. Регулярно приходится преодолевать себя. Например, требуется делать рутинные, но нужные задачи — интеграцию с платежными системами, добавление рекламы, сервисов аналитики и т.п. Даже самое приятное занятие — придумывание загадок, если его делать каждый день в течении нескольких месяцев, рискует превратится в рутину.

Для игры я написал примерно 350 загадок, на это ушло полгода. Сначала загадки придумывал спонтанно, из головы, переводил что-то с английского и хаотично искал их в интернете. Этого было мало, нужен был системный подход. В моем случае подход оказался таким: составить список различных тем и методично прорабатывать тему за темой. Примеры тем: интересные факты о животных, омонимы, интернет-тренды и т.п.

Капитанский совет такой:

Совет

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

Самое сложное скрывается за словом снова. Всегда трудно что-то делать, а делать постоянно, в течении длительного период времени, ещё трудней. Для любителей рефлексии: не нужно себя ни в чем винить, например, сегодня я сделал мало или вместо работы над игрой весь вечер просидел за Dark Souls. Это ок, главное снова возвращаться к работе, снова и снова ) В качестве награды вас ждет кайф, когда вы будете отмечать очередной пункт плана, как выполненный, а потом и релиз.

Созревание

Базовая механика игры — это как зерно, которое даёт росток, из ростка вырастает дерево и, в идеале, дерево начинает плодоносить.

Игра будет крутой и богатой, если игровые механики гармонично связаны с друг другом и хорошо развиты.

Мысль простая, но почему бы и простую мысль не озвучить : )

Рост идей на примере «Загадок»:

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

Дерево идей на самом деле больше, но не станем утомлять читателя : )

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

Релиз

К релизу пришел так:

  • изначально у меня был просто список задач, что нужно сделать
  • потом задачи в списке упорядочились по приоритету
  • далее список разделился на 3 списка: сделать к релизу, доработать в обновлениях и штуки на будущее.

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

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

Если вы дочитали до этого места и вам интересно, что получилось, вот ссылки на игру:

Что теперь

Вот правдивая иллюстрация, как меняется уровень счастья разработчика на разных этапах запуска игры:

Кривая счастья во время запуска приложения Paul Graham

С одной стороны ты счастлив — довёл дело до конца, сделал продукт, открыл его в сторах, красавчик, что сказать : ) С другой стороны, через 3 дня после выпуска цифра установок так и остается «1+». Просто открытие игры в сторе не дает почти никакого трафика, это и есть, согласно картинке, Пропасть Печали. Ты понимаешь, что да, ежедневно в App Store выходит примерно 1500 приложений, а в Google Play еще больше, на этом фоне быть замеченным непросто. Это данность.

Возникает насущный вопрос, откуда взять игроков? Здесь начинается второй большой этап в жизни мобильной игры — софт-лонч и продвижение.

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

Всем отличной недели!

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

Написать
{ "author_name": "Sashka Ch", "author_type": "self", "tags": [], "comments": 13, "likes": 37, "favorites": 24, "is_advertisement": false, "subsite_label": "indie", "id": 32291, "is_wide": false, "is_ugc": true, "date": "Tue, 27 Nov 2018 06:23:00 +0300" }
{ "id": 32291, "author_id": 95548, "diff_limit": 1000, "urls": {"diff":"\/comments\/32291\/get","add":"\/comments\/32291\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/32291"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "possessions": [] }

13 комментариев 13 комм.

Популярные

По порядку

Написать комментарий...
8

Как продвинуть игру без денег или почти без денег

Написать о ней на дтф? ( ͡° ͜ʖ ͡°)

Ответить
0

Хороший вариант ) статьи дают буст к установкам, правда для экспериментов нужен постоянный поток регистраций.

Ответить
2

Отличный материал

Ответить
1

Здесь начинается второй большой этап в жизни мобильной игры — софт-лонч и продвижение.

Нет, он начинается еще до анонса игры.

Ответить
0

Так, но не совсем. Дело не столько в анонсах, сколько в охвате аудитории. Побольше аналитики, поменьше маркетинга.

Ответить
0

Как можно продвигать игру не анонсировав ее? И софт-лончить не продвигая?

Ответить
0

Сашка, спасибо за интересный отчёт! Какие у тебя были навыки перед началом разработки?

Ответить
2

Спасиб. Я работал java-разработчиком, а последние лет 5 работаю ПМ-ом, навык программирования есть, но нужно было восстановить его + освоить юнити. По дороге заметил, что для юнити оч много видео-уроков, а мне больше нравятся текстовые - в них можно быстро найти то что нужно и запрогать )

Ответить
0

Хороший отчет и наконец-то похожие на правду сроки разработки!
Вместо "увидел Unity и через месяц выложил игру на маркет" - полгода на прототип.
Мне нравится анимация, но хочется текст загадки видеть сразу, без ожидания - может быть настройку сделать такую?
Поздравляю с выпуском!

Ответить
0

В итоге вся разработка заняла примерно 2 года, это периодическое программирование по вечерам после работы. Если заниматься целый день с утра до вечера, то мб и за месяц можно сделать прототип, кто его знает : ) За предложение спасибо, помедитирую )

Ответить
0

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

Ответить
0

Денис, напишите потом, далеко удалось пройти ) ?

Ответить
0

Прямой эфир

[ { "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": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "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, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "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" } } } ]
Невероятно! Skyrim портировали на...
Подписаться на push-уведомления