что нужно для создания игры на телефон
Опыт создания игры для Android в одиночку с нуля и как ее зафичерили на Google Play
Сужать круг поиска, чем именно заниматься, было тяжело. Знакомых в этой области не было, поэтому решил отталкиваться от каких-то общих соображений. Так как в приоритете было в первую очередь найти что-то интересное, выбор пал на геймдев. Понравилась идея для начала сделать простенькую 2D-игру под Android и выложить на Google Play.
Немного уделив времени теории (алгоритмам, структурам данных и проектированию), для дальнейшего изучения я выбрал язык Java, который по сути является официальным языком Android, да и в целом очень популярен. В качестве фреймворка приглянулся LibGDX, бесплатный, разработка на нем ведется как раз на Java, и вдобавок он кроссплатформенный. Хотя для следующей игры планирую осваивать всем известный Unity.
Стоит заметить, что из теории самым полезным для меня было изучение шаблонов проектирования в ООП. Применение этих шаблонов мне очень часто помогало на практике, и к книжкам по проектированию я возвращался много раз. Когда ты изначально выстраиваешь правильную структуру кода, грамотно организуешь взаимодействие объектов, это очень упрощает процесс добавления нового функционала в код или его исправление, работать становится намного удобнее.
После создания нескольких пробных игр я взялся за игру, которую в конечном итоге и опубликовал на Google Play. Это казуальная геометрическая аркада, где главная цель — уворачивание от препятствий.
Я не буду здесь описывать здесь процесс создания игры. Если у кого-то есть вопросы, могу ответить в комментариях, или возможно напишу об этом отдельную статью.
Скажу лишь, что сильно затянул процесс разработки, уделял много внимания вещам, которые того не стоили. Пожалуй, наступил на все возможные грабли, на которые обычно наступают новички. Создание игры заняло около года, если не учитывать перерывы и обучение программированию. Все кроме музыки делал сам. С музыкой мне очень помог хороший знакомый.
Говорят, что продвижение игры надо начинать заниматься задолго до релиза. Этого я, конечно, не делал. Продвигать начал сразу после релиза игры. Сделал простенький сайт, трейлер игры, разослал запросы на обзор в кучу разных ресурсов, в том числе англоязычных (ответов получил очень мало, и в основном просили оплату), обновлял соцсети. Из платных методов: купил обзор на 4pda по программе поддержки разработчиков и попробовал рекламные кампании на Facebook и Adwords.
В итоге ни платные, ни бесплатные методы продвижения не принесли мне желаемого эффекта и я практически прекратил попытки. Количество скачиваний игры в день после этого опустилось до 10-40 и игра почти не подавала признаков жизни. Однако мне повезло, и неожиданно для меня Google Play зафичерил меня в разделе Indie Corner. Это не очень популярный раздел по меркам Google Play, но тем не менее количество скачиваний только благодаря ему сильно выросло и в отдельные дни достигало более 2000.
Думаю вместо слов, вам будет больше интересно увидеть статистику. Это данные спустя 2 месяца после релиза и 2 недели после начала фичеринга:
Активные установки / Всего установок: 8400 / 37000
Рейтинг на Google Play: 4.2 (148)
DAU/MAU: 3400 / 33000 (количество уникальных юзеров в день / в месяц)
Среднее время игры в день на юзера: 8m 31s
Среднее количество сессий в день на юзера: 1.6
Юзеров без критических ошибок: 99.6%
Таким образом, я получил возможность сравнить аудиторию, привлеченную через Adwords, и органику. Интересно, что между ними есть существенная разница. “Органический” юзер намного чаще оставляет отзыв, чаще делает покупки (все равно очень редко, но ни один юзер из Adwords до этого не делал покупок), и у него дольше игровые сессии. Хотя, к сожалению, удержание у него значительно хуже (удержание на первый день 25% у органики против 38% у юзеров с Adwords).
Подводя итоги, скажу, что игра до сих пор в небольшом минусе. Но ожиданий от первой игры особых и не было, а опыт получил ценный и интересный.
Если мой рассказ получился сумбурным, задавайте вопросы, уточню, что смогу.
📱 Как начать разрабатывать мобильные игры для Android?
Сергей Кравченко
Перспективы и направления
Популярные жанры
На рынке мобильных игр представлено множество жанров на любой вкус. Новые появляются каждый день – невозможно перечислить каждую нишевую категорию, поэтому выделим самые популярные.
Multiplayer Battle Arenas представляет собой смесь стратегии в реальном времени и экшена. Игроку предоставляется контроль над одним персонажем, известным как «чемпион» или «герой», которого можно выбрать из большого списка. Нужно собрать команду и разрушить базу противников, защищая собственную.
Battle Royale
MMORPG
Многопользовательские ролевые онлайн-игры – это онлайн-RPG, в которой игроки повышают уровень персонажей и приобретают новые способности. При этом сотни аккаунтов одновременно взаимодействуют друг с другом в одном мире и в режиме реального времени.
Головоломки
Более половины пользователей смартфонов и планшетов играют в головоломки. Candy Crush и Tetris популярны даже среди аудитории, которая не идентифицируют себя как геймеров. Логические игры сосредоточены на простых для понимания, но сложных в освоении механиках и требуют использования быстрого мышления.
Казуальные игры
Эта категория доминирует на рынке игр для мобильных устройств. Казуальные игры являются наиболее популярным жанром среди пользователей Android. Их можно легко начать и отложить в любой момент, что позволяет использовать потенциально короткие периоды игры.
Выбор движка
Unity
Unreal
В новом движке Unreal Engine 4 много изменений по сравнению с предыдущими версиями. В качестве языка сценариев используется C++, который полностью заменил популярный некогда UnrealScript, а Kismet заменен более удобной системой Blueprint. Из-за этих перемен даже опытным дизайнерам игр придется пройти обучение, чтобы освоить обновленную версию.
Unreal поставляется с инструментами для использования технологий виртуальной и дополненной реальности для разработки мобильных игр. В «Библиотеке программиста» вы найдете подробный туториал по созданию первого объекта и освоению Unreal Engine 4.
Solar2D
Это далеко не полный список игровых движков, но одна из популярных платформ может стать вашим счастливым билетом в мир геймдева.
Основные этапы разработки
Чтобы создать мобильную игру под Android, нужно пройти определенные этапы. Предлагаем вашему вниманию пошаговый план для начинающих:
Идея и план
Идея – самый сложный и ответственный шаг к созданию успешной мобильной игры. Ключ к поиску идеи – придумать что-то новаторское и увлекательное. Идея должна понравиться массовой аудитории.
Правильное планирование или его отсутствие могут обеспечить успех или провал проекта. Найдите время, чтобы записать идеи, придумать уникальных персонажей, поиграть с разными стилями и подумать о типе игрового процесса, который сделает вашу игру увлекательной. Раскрыть потенциал проекта поможет история: в игровом мире она имеет огромное значение. Чтобы пройти путь до конца, пользователю нужна цель, а для этого понадобится история, какой бы простой та ни была.
Выбор языка и инструментов
Графика
Создание игрового дизайна намного сложнее создания дизайна обычного приложения. Приходится учитывать множество факторов: историю, персонажей и финальный внешний вид. В первую очередь именно дизайн отличает вашу игру от конкурентов, однако обсчет сложных деталей требует вычислительной мощности – нужно соблюдать баланс между хорошей графикой и производительностью, учитывая возможности мобильных устройств под Android. Далеко не у всех пользователей будут крутые флагманы.
Работа в команде
Небольшие проекты можно делать в одиночку, но для реализации более амбициозных стоит обзавестись командой единомышленников. Вне зависимости от бюджета и сложности, выбор программистов, менеджеров и дизайнеров для совместной работы является важным фактором успеха.
Тестирование, запуск и монетизация
Перед запуском игры ее стоит всесторонне протестировать, но не стоит на этом зацикливаться. Многие начинающие разработчики чересчур усердно пытаются сделать программу идеальной, все время задерживая выпуск. Это серьезная ошибка – лучше быстрее выпустить релиз без критичных багов. Если игра понравится аудитории, ее можно будет улучшить.
Стоит подумать и о монетизации проекта. Существует несколько распространенных способов о ней позаботиться:
Развитие проекта
Если ваша игра собрала значительную аудиторию, не стоит останавливаться на достигнутом. Обновления и улучшения позволят сделать ее лучше и привлечь большее количество довольных геймеров.
Стремительное развитие смартфонов за 10 лет изменило игровую индустрию кардинально. От простых карманных консолей Game Boy мобильные игры эволюционировали до многопользовательских платформ со сложной механикой и интересной визуальной составляющей. Это не должно вас пугать: даже простые проекты в стиле платформеров и казуальных игр могут найти свою аудиторию благодаря доступности и простому управлению.
Создание простой 2D игры на Android
Когда я писал эту «игру» у меня возникала масса вопросов по поводу зацикливания спрайтов так что бы они появлялись через определенное время, так же были проблемы с обнаружением столкновений двух спрайтов и более, все эти вопросы я сегодня хочу осветить в этом посте так как в интернете я не нашел нормального ответа на мои вопросы и пришлось делать самому. Пост ни на что не претендует, я новичок в разработке игр под android и пишу я для новичков в данной отрасли. Кому стало интересно прошу под кат.
Постановка задачи:
Игра должна представлять из себя поле (сцену) на котором располагается ниндзя и призраки. Нинзя должен защищать свою базу от этих призраков стреляя по ним.
Пример такой игры можно посмотреть в android market’e. Хотя я сильно замахнулся, у нас будет только похожая идея.
Вот как будет выглядеть игра:
Начало разработки
Создаем проект. Запускаем Eclipse — File — Android Project — Defens — Main.java.
Открываем наш файл Main.java и изменяем весь код на код который ниже:
Код ниже говорит нашей главной функции что запускать нужно не *.xml файл темы, а класс который у нас является самой сценой.
Дальше Вам нужно создать класс GameView.java который будет служить для нас главным классом на котором будет производится прорисовка всех объектов. Так же в этом классе будет находится и наш поток в котором будет обрабатываться прорисовка объектов в потоке для уменьшения нагрузки игры на процессор. Вот как будет выглядеть класс когда на сцене у нас ничего не происходит:
Из комментариев надеюсь понятно какая функция что делает. Этот класс является базовым по этому в нем мы будем производиться все действия (функции) которые будут происходить в игре, но для начало нам нужно сделать еще несколько классов Переходи к следующему пункту — создание спрайтов.
Создание спрайтов
Сейчас мы будем использовать не анимированные спрайты но в будущем я вставлю спрайты в проэкт, если тянет научиться делать спрайты прошу во второй урок по созданию игры под android.
Теперь загрузите эти картинки в папку res/drawable для того, чтобы Eclipse мог увидеть эти картинки и вставить в Ваш проект.
Следующий рисунок должен визуально помочь понять как будет располагаться игрок на экране.
Скучная картинка… Давайте лучше создадим этого самого игрока.
Нам нужно разместить спрайт на экране, как это сделать? Создаем класс Player.java и записываем в него следующее:
Создаем еще один файл классов и назовем его Bullet.java, этот класс будет определять координаты полета, скорость полета и другие параметры пули. И так, создали файл, и пишем в него следующее:
Из комментариев должно быть понятно что пуля выполняет только одно действие — она должна лететь по направлению указанному игроком.
Рисуем спрайты на сцене
Для того что бы нарисовать эти два класса которые мы создали, нам нужно отредактировать код в классе GameView.java, добавить несколько методов которые будут возвращать нам наши рисунки. Полностью весь код я писать не буду, буду приводить только код нужных мне методов.
Для начала нам нужно создать объекты классов Bullet и Player для того что бы отобразить их на экране, для этого создадим список пуль, что бы они у нас никогда не заканчивались, и обычный объект класса игрока.
Дальше нам нужно присвоить картинки нашим классам, находим конструктор GameView и вставляем в самый конец две строчки:
GameView.java — Конструктор GameView
И в методе onDraw(Canvas c); делаем видимыми эти спрайты. Проходим по всей коллекции наших элементов сгенерировавшихся в списке.
А для того что бы пули начали вылетать при нажатии на экран, нужно создать метод createSprites(); который будет возвращать наш спрайт.
Ну и в конце концов создаем еще один метод — onTouch(); который собственно будет отлавливать все касания по экрану и устремлять пулю в ту точку где было нажатия на экран.
Враги
Для того что бы нам не было скучно играться, нужно создать врагов. Для этого нам придется создать еще один класс который будет называться Enemy.java и который будет уметь отображать и направлять нашего врага на нашу базу. Класс довольно простой по этому смотрим код ниже:
И так что происходит в этом классе? Рассказываю: мы объявили жизненно важные переменные для нашего врага, высота ширина и координаты. Для размещения их на сцене я использовал класс Random() для того что бы когда они будут появляться на сцене, появлялись на все в одной точке, а в разных точках и на разных координатах. Скорость так же является у нас рандомной что бы каждый враг шел с разной скоростью, скорость у нас начинается с 0 и заканчивается 10, 10 — максимальная скорость которой может достигнуть враг. Двигаться они будут с права налево, для того что бы они не были сразу видны на сцене я закинул их на 900 пикселей за видимость экрана. Так что пока они дойдут можно уже будет подготовиться по полной к атаке.
Дальше нам нужно отобразить врага на сцене, для этого в классе GameView.java делаем следующее:
Создаем список врагов для того что бы они никогда не заканчивались и создаем битмап который будет содержать спрайт:
Далее создаем новый поток для задания скорости появления врагов на экране:
И имплементируем класс Runuble, вот как должна выглядеть инициализация класса GameView:
Теперь у Вас еклипс требует создать метод run(), создайте его, он будет иметь следующий вид:
В самом низу класса GameView
Здесь мы создаем поток который будет создавать спрайт от 0 до 2000 милисекунд или каждые 0, 1 или 2 секунды.
Теперь в конструкторе в самом конце пишем инициализируем наш спрайт с классом для отображения на сцене:
Ну и конечно же нам нужно объявить эти методы в onDraw(); Вот значит и пишем в нем следующее:
Метод onDraw() в GameView
Снова проходим по коллекции врагов с помощью итератора и проверяем — если враг зашел за предел в 1000 пикселей — удаляем его, так как если мы не будем удалять у нас пямять закакается и телефон зависнет, а нам такие проблемы не нужны. Все игра готова для запуска.
Запускаем нашу игру и что мы увидим? А вот что:
Но что я вижу? О нет. Пули никак не убивают наших призраков что же делать? А я Вам скажу что делать, нам нужно создать метод который будет образовывать вокруг каждого спрайта — прямоугольник и будет сравнивать их на коллизии. Следующая тема будет об этом.
Обнаружение столкновений
И так, у нас есть спрайт, у нас есть сцена, у нас все это даже движется красиво, но какая польза от всего этого когда у нас на сцене ничего не происходит кроме хождения туда сюда этих спрайтов?
С этой функцией я навозился по полной, даже как-то так выходило что психовал и уходил гулять по улице)) Самый трудный метод, хотя выглядеть совершенно безобидно…
Ладно, давайте уже создадим этот метод и не будем много разглагольствовать… Где то в конце класса GameView создаем метод testCollision() и пишем следующий код:
В самом низу класса GameView.java
И так, что у нас происходит в этом методе? Мы создаем один итератор и запускаем цикл для просмотра всей коллекции спрайтов, и говорим что каждый следующий спрайт пули будет первым.
Дальше создаем еще один итератор с другим списком спрайтов и снова переопределяем и говорим что каждый следующий спрайт врага будет первым. И создаем оператор ветвления — if() который собственно и проверяет на столкновения наши спрайты. В нем я использовал математическую функцию модуль (abs) которая возвращает мне абсолютное целое от двух прямоугольников.
Внутри ифа происходит сравнения двух прямоугольников Модуль от (Пуля по координате Х минус координата врага по координате Х меньше либо равен ширина пули плюс ширина врага / 2 (делим на два для нахождения центра прямоугольника)) и (Модуль от (Пуля по координате У минус координата врага по координате У меньше либо равен ширина пули плюс ширина врага / 2 (делим на два для нахождения центра прямоугольника)));
И в конце всего, если пуля таки достала до врага — мы удаляем его со сцены с концами.
Ну и для того что бы эта функция стала работать записываем её в метод run() который находится в классе GameThread, ниже нашего метода рисования onDraw().
Вот что у нас получается после запуска приложения:
Как я создал мобильную игру для своего ребёнка
Немного предыстории
С играми я знаком с самого детства, еще помню ходил каждый день к соседу, чтобы весь день играть в Марио и танчики, а после того как приставка появилась у меня мы с братом, проиграли много суток напролет, знакомясь с различными играми того времени. Я застал Intel 386 и 486, SEGA и первую PS (до сих пор вспоминаю Resident evil 3 nemesis, могу наверно пройти ее закрытыми глазами), в общем, я провел прилично времени за компьютерными играми и, как я думал, имею полное право и опыт сделать что-то свое.
Создание студии по разработке мобильных игр
Звучит, конечно, круто, но по факту, что я сделал, это зарегистрировал первым делом домен в начале 2019 года с названием моей будущей студии redrockstudio.ru. Не подумайте, это не реклама, так как на регистрации домена это и закончилось. Сайт будет, но когда точно, не скажу, сделал это на перспективу, а вдруг будем успешными.
Следующее что я сделал, это оплатил 25$ за кабинет разработчика в Google Play с одноименным название как домен.
На телефоны Apple я решил по началу не делать так как нужно было покупать кабинет разработчика за 100$ и оплачивать такую сумму раз в год. (я еще даже представления не имел как делаются игры и доведу ли я это дело до конца, поэтому ни денег, ни мотивации не хватало).
А какая будет игра?
После грандиозных планов о создании студии я начал размышлять, а какую игру я хочу, и для кого она подойдет.
Решил, что буду делать детскую игру, так как в ней не нужен какой-то серьезный сюжет, да и механики должны быть самими простыми, всё-таки дети что им еще нужно, красивая картинка и анимация и тЫкай по экрану.
Я не смотрел что вообще есть на google play (не искал там идее, так как думал, что это меня будет отвлекать и заведет не туда), я понимал, что игра должна быть полезной как для ребенка, так и для его родителя, поэтому решил, что игра должна быть развивающей.
Так я и пришел к идее игры звуки животных, после того как я полностью придумал в голове как игра должна выглядеть я пошёл в Google Play посмотреть есть ли что-то подобное уже на просторах Маркета. Моему удивлению чего-то похожего я не нашел, да были поделки на коленке, но это далеко отличалось от того что хотел реализовать я. Увидев, что игра как мне тогда казалось будет уникальной, а значит востребованной я начал в голове уже считать заработанные миллионы.
Суть игры
Игра по сути простая как раз для детей от 1 до 5 лет
На экране телефона появляется Рандомно (случайным образом) три животных, затем задается вопрос «Кто говорит?», раздается звук животного, после чего ребенок должен угадать кому принадлежит голос, если малыш угадывает, персонаж скачет (радуется), если нет, то персонаж расстраивается и так бесконечно. Если ребенок три раза ошибается, игра заканчивается и предлагает начать заново.
Первые шаги к созданию игры
Сразу хочу сказать у меня нет знаний не в рисовании не в программировании не в анимации, я от всего этого далек, единственное с чем у меня хорошо это с фантазией и визуализацией. Ну как выяснилось позднее еще доходчиво объяснять что мне нужно ( ну это лично мое мнение ).
Первым делом я стал искать 3D моделлера, так как решил делать игру в трехмерной графике, разместил задание на сайтах фриланса, желающих было очень много, но пришлось отказать от этой затеи так как это выходило очень дорого.
Что бы вы понимали моя игра строится на простой механике угадывания животных, соответственно мне нужно было ОЧЕНЬ много сделать персонажей, а средняя цена одной модели составляла 8000 рублей + как я узнал позднее мне еще нужен специалист, который сделает анимацию этого персонажа, требовалось 3 анимации на персонажа – статика (когда зверек просто стоит), победа (при угадывании зверек прыгает как сумасшедший), и проигрыш (при не правильном ответе зверек расстраивается). В общем 1 модель и 3 анимации для нее мне выходили примерно в 16 000 рублей, а мне нужно минимум 20 зверей для выпуска игры, а это 320 000 рублей чисто на персонажей, а еще нужна музыка и программист.
А вообще в игре планировалось более 100 персонажей, золотая игра получалась на мой взгляд.
Тут моя мотивация куда-то ушла, я не готов был тратить такие деньги на проект, который не гарантирует мне успех. Я оставил эту затею до лучших времен.
Игру нужно сделать!
Спустя полгода, я подумал все-таки нежно довести игру до ума, если она не будет успешной в нее все равно будет играть мой ребенок (надеюсь), мне будет приятно и этого достаточно.
Первым делом я решил отказаться от дорогостоящего 3D и делать в 2D тем более я познакомился с талантливой девушкой, которая хорошо рисовала, а самое главное, она так же, как и я вдохновилась этой игрой, мы договорились если игра будет успешной 25% прибыли ее.
Но у нее было основная работа получалось рисовать 3-4 персонажа в месяц.
С музыкой все получилось быстро, нашел на фрилансе девушку, сказал что мне нужно, через неделю она прислала результат, мы обсудили что нужно поправить/добавить и все готово. ИДЕАЛЬНО!
Следующим шагом я начал искать программиста, который соберет игру на движке Unity (насмотрелся на ютьюбе что нужно делать именно на нем и был прав).
А также стал искать обучающие ролики как сделать анимацию персонажам (в интернете много полезных роликов которые могут научить это делать, но есть главное деталь, руки должны расти с правильного места к сожалению, это не про меня…).
Поэтому начал искать фрилансера который сможет мне это сделать, но так некого кто мне понравился по портфолио не подошел (я уверен, что я плохо и не там искал).
На ютьюбе нашел канал, там парень толково обучает анимации на Dragon Bone (это бесплатная программа для создания 2D анимации) недолго думая написал ему, мы договорились 25$ за каждого персонажа, и всю анимацию в игре сделал он на Spine за что ему огромное спасибо.
С программистом было все немного сложнее, так как я не понимал сколько это может стоить, один мне говорит сделаю за 60 000 рублей, второй говорит, что сделает за 7000 рублей. Конечно я выбрал подешевле…
Самое интересное что он все сделал, и оно работало, но на тот момент в игру мы добавили только 5 зверей. А когда потребовалось добавить еще он был то сильно занят, то у него не было желания, то он вообще пропадал на несколько недель. У меня даже возникала мысль заплатить 60000 руб. но где гарантии что не повторится так же.
В общем начал я опять поиски кто сможет добавить новых персонажей в игру за деньги, которые мне по карману.
Нашел парня с Екатеринбурга имеет в gamedevЕ опыт, пообещал все сделать в срок (заключили договор 50% предоплата остальное после релиза игры). Попросил он за работу 20000 рублей, я подумал дорого ну что поделать дешевле только в ущерб качеству.
Единственное увидев работу предыдущего программиста он решил сделать игру с нуля, на цену работы это не повлияло поэтому я был не против.
И вот спустя почти 2 года, мы это сделали, я нашел копирайтера, который написал описание к игре с ключевыми словами, перевели на несколько языков, сделали скриншоты игры, иконку, рекламный ролик (его сделал я, хоть где-то приложил руку).
В следующей статье я постараюсь рассказать, как мы решили монетизировать игру и какие совершили ошибки, а также сколько игра принесла за первый месяц публикации.
Если будет интересно обязательно продолжу писать.