Раньше я работал над созданием мобильных игр как гейм-дизайнер или продюсер, но сам еще никогда профессионально не писал код. Несколько месяцев назад мне захотелось это исправить и сделать игру своими руками. Так, спустя два месяца работы, силами трех человек в App Store и Google Play появились «Котики». В своей истории я хочу поделиться приобретенным опытом и рассказать о средствах разработки, которые позволили нам быстро сделать эту игру.
Пару слов о подготовительном этапе работы. Прежде чем начинать разработку любого проекта нужно определиться с идеей и командой. Я решил не рисковать и сделал ставку на простой геймплей и популярный сеттинг. В результате недолгих размышлений коты стали центральными персонажами игры, а в качестве механики была выбрана несколько переработанная идея Bejeweled Blitz. Попутно вспомнилась забавная кошачья привычка залезать в пустые коробки — и вся концепция окончательно сложилась. Затем я нашел единомышленников и команда пополнилась талантливым художником и серверным программистом.
Хотя история посвящена разработке, нельзя не сказать несколько слов об арте. Переоценить значение графики в игровой индустрии невозможно, поэтому я рекомендую даже не начинать ничего делать, предварительно не решив этот вопрос.
Если у вас нет возможности привлечь профессионального художника, тогда выберите механику игры, которая позволит совсем не уделять арту внимания. Лучше придерживаться этих двух крайностей, но рисовать что-то на коленке не стоит, игроки этого не оценят. Мне повезло, и котики получились просто обалденными. Вот так выглядел первый набросок:
Игровой движок — основа всего
Сейчас средств разработки игр предостаточно, я же не пожалел, что выбрал Unity:
- Бесплатного функционала движка хватает для разработки игры вроде нашей;
- Большое интернет-сообщество, можно найти много видео-уроков, почти все нужные плагины уже готовы;
- Один код — несколько платформ. Мы делали ставку на Web, iOS и Android;
- Основной язык разработки — C#, остаточные знания которого у меня сохранились с университетских времен.
С движком я учился работать по видео-урокам. Различных курсов довольно много на Youtube, а больше всего мне понравились вот эти. Ну и обязательно посмотрите стандартные уроки от разработчиков Unity.
Встречают по интерфейсу
Обычно функционал создания интерфейса входит в игровой движок, но у Unity исторически это было слабой стороной. Почти все использовали для этого плагин NGUI. Я его тоже изучал, но мне повезло — к моменту старта разработки игры Unity выпустила обновление 4.6, где реализована новая система создания интерфейсов — очень рекомендую использовать именно ее. Она простая, функциональная и бесплатная. Именно благодаря правильному использованию таких технологий удается делать интерфейсы, отображение которых не зависит от размеров и пропорций экрана, что очень важно для работы над мобильной игрой.
Кроме построения самого интерфейса важно было сделать его отзывчивым, «живым». Даже такие, казалось бы, мелочи, как реакция кнопки на касание или красивый спецэффект при активации супер способности кота, улучшили впечатление от игры. Для этого кроме стандартных средств я использовал бесплатный плагин iTween, позволяющий просто и быстро создавать плавные анимации. А около половины спецэффектов приобрел в виде готовых паков, например, таких как FX Mega Pack.
Звуки и музыка тоже неотъемлемая часть интерфейса. Здесь мы смогли обойтись уже готовыми произведениями, приобретя их за относительно невысокую цену. Рекомендую для поиска Premiumbeat и стандартный Unity Asset Store.
Социализация игроков
Возможность общаться и соревноваться друг с другом в играх имеет много очевидных плюсов, но реализация этой функции может стать головной болью для вас и ваших игроков. Для этого потребуется сделать регистрацию игроков, их дружбу и поднять сервер.
Наилучший способ регистрации игрока — использовать готовые сервисы, такие как Apple Game Center, Google Play Games и Facebook. Самостоятельно управлять этим процессом, требовать от игрока ввести почту и запомнить пароль — мера, к которой стоит прибегать только в самом крайнем случае. Мы выбрали Facebook, руководствуясь тем, что:
- Он работает на всех интересующих нас платформах и популярен в большинстве стран мира;
- В Facebook обычно находятся все друзья игрока; чем лучше будет реализовано взаимодействие с ними, тем сильнее будет эффект «сарафанного радио», т.е. больше людей узнают о вашей игре. В «Котиках» мы реализовали возможность делиться достижениями и соревноваться с друзьями;
- Для работы с соцсетью написан хороший Unity-плагин, и все это дружит с Parse, подробнее о котором расскажу ниже.
Выбирая Facebook в качестве основной и пока что единственной платформы, мы понимали, что всем не угодим, и найдется множество недовольных игроков, которые этой соцсетью не пользуются. Однако такой фокус позволил нам быстро запуститься и начать анализировать результаты как можно скорее. В итоге так и получилось, у нас есть небольшой процент негативных отзывов за отсутствие других соцсетей, но это всегда можно наверстать позже.
Серверная поддержка
Если вам не требуется сложная серверная логика, а нужен лишь функционал базы данных для хранения игрового прогресса пользователя и настроек, воспользуйтесь готовой Backend as a Service платформой. Так поступили мы. Мы выбрали и остались довольны облачным сервисом Parse. По сути для нас это база данных с удобной админкой и множеством дополнительных функций, вроде упрощенной идентификации через Facebook и push-уведомлений. Бесплатный лимит у Parse довольно большой и есть хороший Unity-плагин. Для старта нам этих функций хватало. Лишь потом, когда потребовалась дополнительная логика для обслуживания турнира и чемпионата, мы развернули собственный сервер, но от Parse пока не планируем отказываться.
В итоге архитектура игровой системы сейчас упрощенно выглядит так:
Монетизация
Мы сразу решили пойти по пути free-to-play. Игру по этой модели проще продвинуть на мобильном рынке, особенно начинающему разработчику. Но даже если вы сделаете игру платной, советую вам познакомиться с удивительным миром встроенных покупок. В Google Play продать платный продукт нереально из-за пиратства, а защитить покупку внутри игры гораздо проще.
Самое сложное в модели free-to-play — найти правильный баланс. Главное, чтобы игрокам было всегда интересно, и наличие магазина они воспринимали как возможную, но не обязательную поддержку в игре. Все миссии в нашей игре при должном упорстве и желании можно пройти без доплаты. Ставку мы делаем, в основном, на покупки нетерпеливых игроков или очень увлеченных коллекционеров. А собирать в игре действительно есть что — это супер-коты, которые, во-первых, усиливают игрока, а, во-вторых, милы и забавны сами по себе и их действительно приятно коллекционировать.
Для реализации функции продажи рекомендую плагины от Prime31, они платные, но зато просты в интеграции и работают.
Кроме покупок, для монетизации мы используем рекламу. Тут главное не переборщить с частотой, ведь игроки этого не любят больше всего. И, конечно, рекламу нужно отключать, как только игрок сделает первую покупку. Пока мы используем Unity Ads, но позже будем увеличивать количество поставщиков рекламы.
Защищаемся от взлома
Игроки бывают разные, и непорядочность одних может помешать наслаждаться игрой всем остальным. В наших силах попытаться защитить:
- локальные данные игрока (сохраненный прогресс);
- переменные в памяти (например, количество набранных очков в процессе игры);
- механизм встроенных покупок.
Anti-Cheat Toolkit позволил быстро реализовать шифрование, что решило первые две задачи. Защиту покупок лучше сделать на стороне сервера, особенно если он и так уже есть. Однако проверку подлинности можно сделать и на стороне игры. В случае с App Store нужно обратиться к их серверу, в случае Google Play это делается прямо на клиенте. Кстати, недавно здесь была статья, о том как сделать защиту своими руками.
Не забываем про локализацию
Планируйте поддержку нескольких языков с самого начала разработки, даже если контент на русском языке пока единственный. С подготовленной системой вы быстро подключите новый язык. В нашем проекте все тексты локализации хранятся в google-таблице. Очевидный плюс — документ могут редактировать сразу несколько людей, без создания промежуточных документов и пересылок. Тексты из таблицы в формате csv подгружаются в игру автоматически. Если будет интересно, расскажу в комментариях подробно, как это работает.
Анализируем результаты
Незаменимым помощником в работе над ошибками является внутриигровая аналитика. Важно понимать, откуда приходят ваши игроки, как на самом деле они играют, когда и почему уходят. Новичкам будет проще всего начать с бесплатной и простой в освоении GameAnalytics.
Я рекомендую использовать две системы аналитики в проекте. Это поможет вовремя обнаружить ошибку подключения одной из них, т.к. вы быстро заметите, если данные будут расходиться. В качестве второй аналитики мы используем Google Analytics, у нее большой бесплатный лимит. Она предоставляет более подробные данные, например, можно видеть, откуда игроки пришли в вашу игру. Опять же, для Unity уже есть хороший плагин.
Кроме внутренней аналитики вам потребуется отслеживать статистику продаж. После того, как приложение будет выпущено и пойдут первые покупки, пригодится сервис AppAnnie, позволяющий агрегировать данные из всех магазинов и рекламных сетей. Это действительно удобно — вся статистика в одном месте, не говоря уже о возможности отслеживать места в различных топах.
Сервера и промо-сайт
Если у вас есть серверное приложение, то его где-то нужно запустить. Лучше бесплатно. Лучше на хорошем железе. Все и сразу, конечно, не бывает, но я нашел лазейку в виде программы поддержки стартапов от Microsoft. Если вы только начинаете свое дело, то они предоставляют вам серверные мощности Azure на $9000 в год. На практике вы получите 5 приличных серверов бесплатно на 3 года. На мой взгляд это отличное предложение.
В том числе на Azure можно захостить промо-сайт игры. Он пригодиться, если кто-то захочет погуглить (например, журналисты), ну и для разных других нужд. Например, мы используем его как лендинг для Share-постов, которые игроки делают в Facebook. Сайт Котиков мы сделали тоже бесплатно на базе WordPress.
Затраты
Для того, чтобы выпустить первую версию игры, мы втроем потратили 2 месяца личного времени и порядка $270 на покупку музыки и Unity-плагинов. Я считаю эти затраты более чем приемлемыми. Покупка каждого плагина или готового контента оправдала себя, ведь это сэкономленные месяцы разработки.
Сейчас наша игра выпущена на русскоговорящие страны. Мы продолжаем доработку игры и параллельно общаемся с будущими партнерами, которые помогут продвинуть игру в различных странах. Надеюсь, наш опыт и советы помогут вам в разработке и сэкономят бесценное время.
Буду рад ответить на вопросы в комментариях.
Update: В комментариях коллеги предложили еще несколько полезных плагинов. Я их не пробовал, но судя по описанию, они стоят упоминания:
- DOTween — более шустрый аналог iTween
- TextMeshPro — если возможностей стандартных текстов uGUI будет недостаточно
- I2 Localization — чтобы не писать свою систему локализации