[Из песочницы] Мой опыт разработки Android игры и несколько слов о монетизации
Здравствуйте, я хочу рассказать о своем опыте создания недавно вышедшей мобильной игры на Android, в общих чертах описать способы эффективного вывода графики на экран мобильного устройства с использованием OpenGL и привести результаты моих экспериментов по интеграции рекламных сетей.
Кратко об игре Doughty Spartan Жанр игры — экшен-платформер. Главный герой игры — спартанец, цель которого — разобраться со всеми врагами (монстрами).Основная ставка сделана на необычную боевую систему с необходимостью использовать в бою с монстрами кувырки, уклоны, блок. Также имеется возможность проводить скрытие атаки (когда враг не видит вас) для причинения удвоенного урона противнику. В игре присутствуют подсказки, которые объясняют основы механики боевой системы.У вас в распоряжении может быть 2 типа оружия — меч и копья, которые можно менять в зависимости от ситуации. Передвижение по уровню не полностью линейное, то есть вы сами планируете, как лучше проделать свой путь для победы над всеми врагами. Есть разные типы врагов, в том числе те которые атакуют с ближней дистанции и те которые атакуют с дальней, соответственно нужно использовать разную стратегию боя для каждого типа монстров.
Разработка игры Игру решено было реализовать на собственно разработанном 2D движке на Java, так как был интерес изучить платформу Android и особенности работы с графикой на нем. В данный момент это решение можно считать спорным, так как использование уже готового игрового движка даст возможность сэкономить достаточно времени, которое можно использовать для создания более качественной игры. Еще один большой плюс современных мобильных игровых движков (есть и бесплатные) это кроссплатформенность, которая может обеспечить значительное увеличение количества игроков. Поэтому, я вам рекомендую сначала внимательно изучить все возможности готовых игровых движков, и если их достаточно для реализации вашего игрового проекта, то целесообразнее будет использовать уже существующий движок. И, конечно же, при выборе движка учитывайте такой важный параметр как кроссплатформенность.А теперь подробнее про реализацию собственного графического движка если существующие вас не устраивают. В Android есть 2 способа вывода графики — с использованием Canvas или Open GL. Первый метод более простой в реализации, но обеспечивает низкую производительность, подходит для игр с не очень требовательной к ресурсам графикой. Работать с Open GL сложнее, но и производительность будет значительно выше, что необходимо для большинства современных мобильных игр.
В начале разработки, попробовав реализовать рисование графики с помощью Canvas, я решил, что это обеспечит достаточную производительность для моей игры. Но не тут-то было, так как игра довольно активная и с немалым количеством графических объектов то по мере разработки производительность, которую выдавал Canvas, все время падала. Потом стало ясно, что без Open GL не обойтись. Open GL технология достаточно серьезная, поэтому ее изучение следует начать с фундаментальных основ. Мне, например, для реализации подходящего вывода графики пришлось изучать книги и статьи, которые описывают как основы работы с Open GL, так и те которые рассказывают о специфике работы с Open GL в Android.
Про то, как реализовать игровой движок с использованием Open GL я детально писать не буду, в интернете можно найти достаточно информации по этому поводу, а напишу рекомендации, которые обеспечат хорошую производительность вывода 2D графики. И так, для отображения графических объектов с использованием Open GL можно воспользоваться такими способами:
Vertex array. Данный способ предполагает использование массива для хранения информации о вершинах и текстурных координатах объектов. Сначала вы заполняете массив необходимой информацией, потом подключаете нужную текстуру и вызываете метод Open GL для вывода графики на экран. Данный способ можно оптимизировать с использованием процедуры Sprite batching. То есть создается общая для разных объектов текстура и в массив данных записывается информация о вершинах и текстурных координатах сразу нескольких объектов с одинаковой текстурой, поэтому для рисования этих нескольких объектов достаточно будет вызвать метод вывода графики всего один раз, что соответственно и ускоряет работу движка. Vertex Buffered Object. Этот способ схожий с первым, с той лишь разницей, что с его помощью лучше рисовать те объекты вершины и текстурные координаты которых не изменяются на протяжении всего процесса вывода графики. Типичное использование этого способа предполагает заполнение массива данных всего один раз (в основном при загрузке уровня), а потом можно использовать этот неизменный массив для многократной визуализации графических объектов. Draw Texture Extension. Данный способ характеризуется тем, что информация о вершинах сохраняются не в массиве, а передается непосредственно методу, который производит вывод графики на экран, то есть этот метод нужно вызывать отдельно для каждого графического объекта (если только разные объекты не имеют одинаковые вершины). Несмотря на это, данный способ обеспечивает довольно хорошую производительность, и он есть предпочтительным, если количество графических объектов, которые нужно вывести на экран не очень большое. Но, данный способ не поддерживает рисование объектов под заданным углом, для чего можно воспользоваться предыдущими способами визуализации. Если вы хотите достичь максимальной производительности работы графического движка то вам, скорее всего, придётся реализовать все 3 способа вывода графики, и использовать каждый в отдельной ситуации. Но, следует учесть, что есть устройства на базе Android которые не поддерживают Vertex Buffered Object и Draw Texture Extension, хотя их количество очень малое.Монетизация Для монетизации игры Doughty Spartan используется популярная сейчас модель Free 2 Play и реклама внутри приложения, каждый желающий может скачать игру бесплатно. В игре сначала доступен 1 уровень, а для того чтобы открыть следующий нужно определенное количество монет, которые можно заработать проходя уровни и чем лучше вы их проходите (например выполняете скрытые атаки) тем большее количество монет вы получаете. Совершив внутриигровую покупку пользователь может сразу открыть все уровни и отключить рекламу.Чуть более детально напишу об опыте интеграции рекламных сетей. Для того чтобы можно было заработать на рекламе она должна быть соответствующего качества. Нужно найти те рекламные сети, которые рекламируют действительно хорошие приложения. Если вы создаете игру, то можно интегрировать рекламу других игр, так как ваш потенциальный пользователь, скорее всего, любит проводить время играя на мобильном устройстве и есть шанс, что он кликнет на игровой рекламный баннер.
Также следует рассмотреть такой способ монетизации как мотивированная реклама, то есть игрок получает определённые игровые бонусы (внутриигровую валюту) если посмотрит видеоролик, кликнет на баннер, установит рекламируемое приложение и др. Некоторые рекламные сети сами способствуют такому методу монетизации, например Tapjoy.
В процессе разработки изучал следующие рекламные сети:
Chartboost — позволяет вставлять рекламу других игр. Данную рекламную сеть рекомендовало использовать большое количество разработчиков мобильных игр, так как обеспечивается неплохая оплата за установки. Сам SDK выполнен достаточно качественно, интеграция быстрая, полноэкранная реклама выглядит красиво, появляется с анимацией. Также имеется возможность интегрировать кнопку «More games», которая отображает список рекламируемых игр. Минус то, что Fill rate (доступность рекламы для показа) в наших странах (Россия, Украина, Беларусь) не такой высокий как в США и Европе. Startapp — рекламируются как игры, так и программы. Тут меня привлекло интересное оформление рекламных баннеров (некоторые воспроизводят анимацию) и те приложения, рекламу которых я увидел, есть достаточно популярными и полезными. Присутствует достаточное количество рекламных форматов — баннер, полноэкранный баннер, слайдер (выдвигается сбоку), реклама при загрузке приложения и др. При интеграции проблем не возникло, единственный минус, что SDK не позволяет обработать событие нажатия на полноэкранный баннер, что необходимо, если вы самостоятельно реализовываете показ мотивированной рекламы. Fill rate достаточно хороший. Плата за установки. Revmob — реклама игр. Основные рекламные форматы — баннер, полноэкранный баннер, Pop-up и ссылка на приложение, которую можно привязать к кнопке и назвать, например «More games». На форумах читал, что данная сеть приносит неплохой доход. Не совсем понравилось SDK, тем, что присутствует утечка heap, то есть с каждым разом, когда вы показываете рекламу, вырастает количество использования памяти и когда свободного heap остается мало реклама перестает загружаться чтобы приложение не вылетело с OutOfMemoryError. Писал разработчикам SDK, в ответ они лишь привели рекомендации какими методами показывать полноэкранный баннер, что проблему не решило, поскольку я и так выполнил интеграцию по инструкции с их сайта. Плата производится за клики или переходы по ссылкам рекламодателя. Tapjoy — реклама приложений и игр. Главная особенность то, что имеется встроенная поддержка мотивированной рекламы с помощью Offerwall — стена с предложениями (посмотреть видео, установить приложение и т.д.), выполняя которые игрок получает внутриигровую валюту. В SDK сейчас происходят изменения, они вводят новую технологию «nGen», так что некоторые старые методы показа рекламы, например полноэкранной, устарели (deprecated) и рекомендуется переходить на nGen. Кроме Offerwall можно также интегрировать баннеры и полноэкранные баннеры. Предлагается плата за установку, за выполнение заданий Offerwall. Inmobi — реклама приложений и игр. Судя по отзывам других разработчиков тут достаточно хороший Fill rate в разных странах. Основные форматы рекламы — баннер и полноэкранный баннер. Тестирование интеграции этой рекламной сеты заняло наибольшее количество времени, так как чтобы проверить правильность интеграции еще не вышедшего приложения нужно добавить ID каждого тестового устройства в Панель управления (Dashboard) на сайте InMobi что не очень удобно по сравнению с другими рекламными сетями, где нужно просто перевести показ рекламы в тестовый режим. Чтобы получить ID устройства (в том числе и эмулятора) нужно в коде вашего приложения включить режим Debug, после этого запустить приложение и в LogCat консоли найти строку типа «Publisher device Id» где и будет указан ID устройства. После того как я добавил ID устройства и включил тестовый режим пришлось почему-то ждать несколько дней пока тестовый баннер не стал отображаться. Платят за клики по рекламе. AdColony — реклама игр посредством показа видеороликов. Обеспечивается оплата за просмотр видео до конца, длительность которого в среднем 15 с. Интеграция достаточно быстрая, причем есть возможность запретить или позволить пользователям закрывать видео не досмотрев его до конца. По моему мнению, AdColony эффективно использовать как мотивированную рекламу, чтобы не раздражать пользователей показом видео непосредственно посреди игрового процесса. Vunge — еще одна рекламная сеть с показом видео рекламируемых игр. Главное отличие от AdColony в том, что оплата осуществляется за установку игры, видео которой посмотрел пользователь. Детальные инструкции по интеграции каждой рекламной сети можно посмотреть на их официальных сайтах.При реализации монетизации с помощью рекламы следует учитывать то, что в некоторых странах Fill rate может быть не достаточным. Поэтому лучше интегрировать сразу несколько рекламных сетей и показывать ту рекламу, которая доступна в данный момент. Целесообразным будет реализовать кэширование рекламы, например, в процессе загрузки игры и сразу после показа рекламы, чтобы полноэкранный баннер можно было отобразить в определённый момент без задержки на загрузку. Функция кэширования обеспечивается SDK рекламных сетей и в большинстве случаев выполняется вызовом всего 1 метода предоставляемого SDK.
Релиз Изначально хотел выпустить игру через издателя, но, к сожалению, игра их не особо заинтересовала, в основном, через то, что выполнена в необычном жанре и она не казуальная. Один русский издатель указал, что графику нужно сделать более «мультяшной» в то время как Chillingo наоборот понравилась стилистка игры, то есть видение того какой должна быть игра у разных издателей может значительно отличатся.Список издателей, которым отправил заявку на публикацию Chillingo, Rovio, Nevosoft, Ayopa Games, Digital Chocolate, Bulkypix, Karmic Apps, KamaGames, Web-Source Technology, Ubinuri, Yodo1, GREE, G5 Games, Apps Ministry, Fingersoft, Renatus, Big Fish Games, Pocket Gems, Zynga, Kabam, 6waves, NuOxygen, HeroCraft.
При выборе игры издатель также интересуется вашим опытом в индустрии разработки игр. У меня переписка с одним издателем закончилась на том, что он узнал, что это моя первая игра, и я работаю один. Также часто требуется, чтобы в игре присутствовала Free 2 Play модель монетизации.Заявку на публикацию игры я отправил довольно большому количеству издательских фирм. На удивление, наибольший интерес проявили Chillingo, которым я отправил тестовый билд игры. Но, проанализировав ситуацию на рынке мобильних игр, они ответили, что в наше время игры жанра платформер сложно монетизировать, поэтому вынуждены отказаться. При отправке заявки давал ссылку на видео с геймплеем игры, чтобы издатели смогли быстрее принять решение насчет публикации. Также это видео используется на странице игры в маркете.
Видео игрового процесса [embedded content]
В данный момент продвижением пытаюсь заниматься самостоятельно путем размещения постов об игре на разных тематических сайтах, некоторые из них взял из этой статьи. Ошибкой было то, что информацию об игре я начал размещать после ее выпуска в Google Play, а надо было на более ранних этапах разработки, так как можно получить довольно полезные комментарии об игре и, возможно, что-нибудь изменить до момента релиза.Заключение Надеюсь, приведенная выше информация поможет вам в разработке собственного игрового проекта.