Мобильный gamedev: инструменты, продвижение, аналитика
Совсем недавно мы опубликовали нашу игру для мобильных платформ iOS/Android. За несколько месяцев разработки накопился некоторый технический опыт игростроя, которым хотелось бы поделиться.
Графика Пока мы только смотрим в сторону 3D разработки. На данный момент создание качественных 3d-моделей дело не легкое и не дешевое. К тому же, трехмерная графика создает определенные трудности с производительностью. Поэтому решили использовать старый добрый 2d жанр.В нашей игре мы использовали скелетную анимацию. Попробовали несколько продуктов и остановились на Spine. На хабре уже есть пост знакомства с данным инструментом. Использовали Pro версию, так как только там доступны такие вкусности как: Meshes — позволяют указать области внутри изображения, что улучшает fill rate, благодаря тому, что не прорисовывается прозрачная область вне указанных областях. Skinning — позволяет переключаться между разными наборами изображений, прикрепленных к определенным bones в анимации. Мы использовали скины для разного внешнего состояния врагов (здоровый, раненый, почти убитый…), а также для различной экипировки. То есть, у нас один проект, одна анимация ходьбы, например, а «обвесы» переключаются с помощью скинов. Именно этот пункт мотивировал нас приобрести pro лицензию. Free-Form Deformation — позволяет с помощью mesh деформировать изображения. Причем деформацию можно использовать в анимации, что позволяет сделать игру более живой, а также снимает с художника кучу работы по анимированию какой-нибудь одежды на персонаже. Это также положительно сказывается на общем весе графического материала. Кстати, к моменту выпуска игры не было реализации FFD в run-time библиотеке для Cocos2-dx. Мы тогда связались с авторами spine, хотели узнать примерные сроки реализации. Но все складывалось печально, так как там небольшое количество разрабов пытаются поддержать интеграцию spine c несколькими игровыми движками. Зато, они поделились ссылкой на кастомную реализацию FFD для cocos2d. Эта реализация где-то на 80% подходит для cocos2d-x, остальную часть пришлось за пару дней переписывать на плюсы. Благо у нас есть одаренный плюсовик, который не страшится решать технические сложности. Ниже представлены анимации, которые помогут по достоинству оценить данную фичу. В общем, сложилось приятное впечатление после работы со Spine, авторы которого постоянно добавляют новые фишки. Единственные претензии только к скорости обновлений, так как они анонсируют очень «вкусную» фичу, но не особо спешат с ее реализацией.Платформа iOS В процессе разработки мы использовали CocosBuilder, но так как он уже давно не поддерживается и практически отсутствуют новые комиты, то постоянно всплывали различные старые баги и приходилось много чего исправлять, что являлось довольно существенной помехой. Стоит еще обратить внимание на SpriteBuilder, на который идет редирект с сайта cocosbuilder-a. Возможно данный форк cocosbuildera будет лучше поддерживаться и обрастать функционалом, кстати, у него отсекли возможность работы с js. Также, разработчики заявляют, что, по сравнению со своим прародителем, у spritebuilder-а улучшена работа с ресурсами, добавлен редактор для локализаций, также прокачено общее юзабилити. К сожалению, опыта работы с ним у нас еще не нет, но будет чертовски круто, если кто-то поделится своими впечатлениями в коментах. В нашем следующем проекте мы практически наверняка откажемся от cocosbuilder-a и будем смотреть в сторону альтернатив, например CocoStudio, хотя ее еще нет для Mac:(Также стоит отметить работу с PVR графикой — для ios этот формат позволил сэкономить немного занимаемой памяти. Визуально потери качества не заметно. Для наглядности, можно взглянуть на таблицу сравнения занимаемой текстурой памяти в КБ: Формат 1024×1024 2048×2048 PVRTC4 512 2048 PVRTC2 256 1048 RGBA 32 bit 4096 16384 RGBA 16 bit 2048 8192 Для большинства наших текстур качество в PVRTC4 выходило лучше, чем в RGBA4444, немного хуже чем в RGBA8888, но сравнимо. Не все текстуры достаточно хорошо выглядят в PVR формате. Android устройства поддерживают следующие форматы сжатия ETC1, PVRTC, ATITC, S3TC —, но как обычно, одни девайсы поддерживают один формат, другие — другой. Кстати, может и для android придумали кое-какие костыли, надо будет пробежаться по поиску.Для для девайсов с различными экранами нужно предусмотреть определенный механизм позиционирования игровой сцены.В cocos’e при разработке используются свои единицы измерения, задаваемые разработчиком — designResolutionSize. В нашем случае мы выставили размер по умолчанию 1024×768 (под ipad), и определили что ширина может варьироваться в зависимости от соотношения сторон девайсов (FIXED_HEIGHT). Таким образом, на «длинных» девайсах мы могли получить размер 1400×768. Также при дизайне интерфейсов в CocosBuilder’е есть возможность позиционировать элементы относительно различных углов (отступ от правого края 100, сверху 50). Подробнее можно почитать здесь.Платформа Android Здесь у нас были трудности с сохранение данных. Проблема оказалась в том, что если производилась попытка сохранять данные в несуществующем дереве директорий, эти самые директории не создавались автоматически, поэтому пришлось добавить соответствующую проверку. На просторах stackoverflow было найдено замечательное обсуждение, решавшее нашу проблему.Далее нам нужно было решить проблему с размером apk файла. Google настоятельно рекомендует использовать файлы дополнений obb. К сожалению, у нас возникли трудности с чтением zip-данных c cocos2d-x, а поэтому решили пойти путем multiple apk. То есть обычное разделение графики в зависимости от устройства. В этом случае используем три набора графики medium, large и xlarge. А в манифесте прописываем определенные параметры: AndroidManifest.xml
Продвижение, аналитика Аналитические данные мы получаем с помощью Google Analytics. Данный инструмент позволяет отслеживать количество новых пользователей, время игровых сессий. Также можно следить за различными действиями игроков, например, какие скилы были прокачены в первую очередь, какую экипировку чаще покупают. Становятся наглядными проблемные уровни, на которых игроки застревают и покидают игру. Ну и бонусом можно смотреть, сколько раз были совершены нелегальные покупки в игре:).Есть несколько вариантов продвижения приложения/игры в App Store или Google Play. Если игра довольно виральная — читай крайне необычная, к примеру, какой-нибудь пиксельарт про крота, который путешествует в космосе и собирает желуди, то продвигать такой проект намного легче — сразу становятся доступны различные ресурсы со смешными картинками/видео и огромными аудиториями, для которых что-то необычное это вполне естественно. Также различные крупные издания могут куда охотней и абсолютно бесплатно написать про ваш продукт, т.к. он явно будет выделяться среди остальных игр, представленных в сторах. Если виральность у игры низкая — остаются два способа. Это продвижение при помощи кросс-промоушена внутри своих приложений + различные статьи на тематических ресурсах и обзоры на популярных порталах или же, если позволяет бюджет — закупка траффика, т.е. установок. В зависимости от категории, в которой нужно продвинуть игру требуется различно количество инсталлов, для категории Образование это одно число —, а для Экшен будет уже абсолютно другое.Поскольку желудей в нашей игре нет — мы выбрали вариант первый вариант. Активное продвижение начали примерно неделю назад, когда игра появилась в обоих сторах. Мы заказали платный обзор на 4pda, который принес примерно 1000 инсталов на android и 200 на iOS. Также заказали еще обзоры на macdigger и appleinsider. Пробовали рекламные посты в группах Vk, которые особого результата не принесли. Попутно использовали кросс-промоушен нашей игры в других приложениях пользуясь House Ads от Admob-а.Кстати говоря, мы выпустили игру только для стран СНГ, чтобы немного обкатать механику, поднастроить баланс. Этакий софт-ланч. В конце этой недели планируемся выпуститься на остальные страны.Также добавлю, что подходы к продвижению для двух маркетов разнятся. Если для app store нужно организовывать буст скачек в краткосрочный период, в течение приблизительно двух-трех дней, то Google Play требует долгосрочного продвижения, где, помимо количества скачек и оставленных отзывов, немаловажное значение играет еще и retention, то есть удержание пользователей. Результаты продвижения наблюдаем по AppAnnie. Напрягает, что данные с play google приходят с небольшим запозданием.
Заключение Радует, что с каждым разом нам удается делать более качественные и серьезные игры. Еще замечательно то, что инструментарий неумолимо совершенствуется, благодаря чему на пути к совершенству нас сдерживают только временные границы. К сожалению, визуальная составляющая это только половина игры, другую половину занимает игровая механика, сюжет, баланс, но это тема уже для другой статьи. Будем рады вопросам!