Как написать мобильную игру
Перейти к содержимому

Как написать мобильную игру

  • автор:

Как создать игру на Андроид с нуля самому

Давно мечтаете сделать свое приложение, имеете интересные идеи, хотите заработать на создании качественной игры? Безусловно, практически каждый пользователь загорался таким желанием, но часто останавливают сомнения, страхи и неуверенность. Ведь как создать игру на Андроид с нуля самому, если навыки программирования слабо развиты, владение английским языком оставляет желать лучшего, а никаких специализированных программ под рукой нет? Попытаемся разобраться.

Уровень сложности создания Android-игр

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

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

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

3 программы для создания Андроид игры

Также развеем заблуждение о том, что для создания приложения необходимо полностью знать Photoshop, иметь дизайнерский вкус и отлично рисовать. Но не стоит путать, например, новое приложение для общения с полноценной игрой. Если вы решили создать первое – там главное только текст и клавиши управления, но если настоящую игру – без художественных элементов не обойтись. И фишка в чем: эти элементы находятся в конструкторе. То есть, собственноручно рисовать вам придется очень редко.

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

Теперь подводим небольшие итоги. Если вы решили создать свою игру, то для этого требуется:

  • Идея, образное представление, о чем будет игра, знание ее основного сюжета;
  • Минимальное владение языком Java, ведь полностью без программирования (без нужных знаний) не обойтись;
  • Установленная на компьютере программа для создания продукта;
  • Свободное время, внимательность и желание трудиться.

Какую игру лучше всего создать

Четких ограничений нет, выбор в конструкторах обычно предоставляется обширный: квест, карточная игра, догонялки, стрелялки, экшн. Обилием жанров больше всего славится приложение Construct 2.

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

Еще вас могут заинтересовать карточные игры, где не требуется высокая графика, четкая прорисовка и множество действий. Все шаги, в том числе тасовка карт и раздача, отличаются от других жанров однотипностью. Обычно у таких игр и самый простой интерфейс, состоящий из обычного меню.

Самое сложное направление для создания, это, конечно, экшн-игры, где присутствует детальный проработанный мир, обычно сделанный в 3D-формате, несколько главных персонажей, длительный сюжет и множество уровней. На примере рассмотрим известное приложение Modern Combat. Конечно, для такой мощной игрушки требуются десятки специалистов, хорошие вложенные деньги и месяца работы. Но это не значит, что пользователь сам не сможет создать 3D-игру. Нужны только хорошие умения и навыки, поэтому этот жанр следует оставить на потом.

Как создать игру на Андроид с нуля без навыков программирования

Как создать игру на Андроид с нуля самому

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

Обратите внимание! Мы советуем загружать приложения только с проверенных сайтов и перед установкой тщательно проверять их антивирусом. В противном случае есть риск занести вредоносные файлы в свою операционную систему.

Construct 2 — простая платформа для 2D приложений

Как создать Андроид игру с Construct 2 на русском языке

Лучшее приложение в своем роде, которое занимает лидирующие позиции. Главное преимущество – это возможность создавать игры практически на все платформы, в том числе и на Android. Поддерживается и анимационный формат HTML5, с помощью которого созданные творения будут доступны для игры онлайн во всех браузерах, что немаловажно, ведь такие игрушки гораздо проще в функционировании.

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

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

Большая часть создания – это обыкновенное перетаскивание элементов и установка их взаимодействия. Например, персонаж цепляется за камень, и уровень заканчивается; одна часть фона представляет собой траву, другая, верхняя – небо, играет нейтральная музыка и характерные звуки. Вот и все, можно считать, самая простая и элементарная игра практически создана.

К сожалению, существует и минус: в бесплатной версии можно экспортировать творения в браузеры, а оттуда открывать их на совершенно любой платформе, но бесплатно создать игру только для Андроид не получится. Для этого придется вкладывать деньги в платную версию, стоимость которой немного превышает 100 долларов. Зато потом возможности намного расширяются, игры без проблем можно делать чисто на Андроид или iOS, а с помощью установочных файлов открывать приложения на персональном компьютере.

Видео-инструкция как сделать игру на Андроид с помощью Construct 2 и Construct 3

Unity 3D — мощный движок для разработки 3D проектов

Как сделать Андроид игру с нуля через Unity 3D

Если предыдущая программа позволяла создавать только 2D-игры, то Unity 3D уже выходит на новый уровень и предоставляет разработчикам все условия для создания отличного трехмерного проекта. Программа оснащена различными готовыми моделями, изображениями, скриптами и текстурами на любой вкус. Компиляция имеет высокую скорость, редактор, несмотря на свою многофункциональность, очень прост в использовании.

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

Единственное требование – это достаточно мощный компьютер, поддерживающий 3D-форматы и навык программирования среднего уровня, поскольку новичкам будет все же немного трудно разобраться.

Видео-инструкция по созданию игры с помощью Unity 3D за 45 минут

Game Maker — самый легкий вариант для новичка

Делаем простую Android игру через Game Maker

Наиболее легкая программа из всех существующих, идеальная для неопытных и неуверенных в своих знаниях пользователей. Именно здесь можно обойтись и без программирования, и без языка Java.

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

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

Видео-мануал по программе Game Maker

Этапы создания игр

Делаем простую игру

Под простой игрой подразумевается самый незамысловатый сюжет. На примере рассмотрим такую идею: человечку необходимо преодолеть препятствия, чтобы благополучно добраться до финиша. К тому же, по дороге желательно собирать монетки. Согласитесь, воспроизвести такую картинку с помощью Construct 2 довольно просто и интересно. Рассмотрим приблизительные ориентировочные действия:

Как я запустил свою первую мобильную игру и провалился

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

Коротко об игре

Шахматная доска, шахматные фигуры, но нет — не шахматы. В распоряжении игрока только одна фигура — конь. На верхней линии доски постепенно появляются вражеские фигуры, в основном пешки. Раз в секунду несколько вражеских фигур одновременно ходят. Количество ходов игрока при этом не ограничено. Фактически вас ограничивает лишь фреймрейт. У меня максимально получалось совершить 4 осмысленных хода между ходами соперника.

Цель игры: набрать как можно больше очков. Ценность срубленных фигур как в шахматах: срубленная пешка — 1 очко, слон и конь — 3 очка.

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

Поставил среднесрочную цель

На долгое время оставаться без дохода психологически тяжело. Срок в 2 месяца звучал как что-то не страшное, что я определенно могу себе позволить. Цель сформулировал так:

Если за 2 месяца на своей игре заработаю хотя бы 1 доллар, то «продлеваю» еще на месяц.

Дальнейшие цели я видел как увеличение суммы в 10 раз: за третий месяц заработать $10, за четвертый — $100 и т.д. В целом, от $1000 увеличение менее чем на порядок меня тоже бы устроило.

Выбор игрового движка

В плане движка практически сразу выбрал Unity.

Ранее я уже пробовал бесплатные open source решения для геймдева и для чего-то серьезного использовал бы их с осторожностью. Доводилось, например, работать с Godot (GDScript) и Corona SDK (Lua). Коммьюнити не такие большие, сырой инструментарий и непопулярные языки программирования.

Про Unreal Engine слышал, но подробно не смотрел. Со стороны кажется, что перебор для мини-игры, но могу ошибаться.

Unity же в моем случае — это лишь условно-платное решение, т.к. для персональных разработчиков с доходом до $100k в год основной сервис предоставляется бесплатно. На старте о таком доходе можно только мечтать.

Ну и C# достаточно приятный язык, особенно после Lua. С опытом в Java дался без проблем.

Разбил работу на отрезки с маленькими целями

Годы в продуктовой разработке разучили работать по наитию, поэтому первым делом я составил бэклог доработок и видение MVP, спланировал первый спринт.

Как инструмент для планирования использовал Miro — крутая визуализация, гибкий и мощный инструмент. Рекомендую.

Планирование заняло совсем немного времени. При этом у меня появился четкий план работ. В течение первого спринта (10 дней) я ни разу не задумывался, чем бы заняться. Ну и как реклама целеполагания как такового: мой первый запуск состоялся уже через 10 дней после старта.

В колонке «Текущее состояние» два скриншота того, что у меня было на старте: экран с доской и кнопкой Play. Плюс сырая механика.

В колонке «Текущее состояние» два скриншота того, что у меня было на старте: экран с доской и кнопкой Play. Плюс сырая механика.

Изначально продумал на

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

Так выглядел мой первый спринт:

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

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

Критерии для запуска взял из небольшой статьи «13 главных ошибок, мешающих разрабатывать игры». Основной посыл критериев:

Запускайте игру и получайте фидбек как можно раньше. Не только игру, любой продукт.

Первый релиз в Google Play (дни 0-10)

Чтобы публиковать мобильные приложения и игры для Android, нужно завести аккаунт разработчика в Google Play. Единоразовый взнос (на осень 2022 года) — $25.

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

Перед каждой публикацией Google Play проверяет ваше приложение. Иногда вручную, но чаще автоматически. Автоматическая проверка в среднем занимает около четырех часов. Но первую версию, кажется, всегда проверяют вручную, что сильно дольше. Если вы приурочиваете запуск к определенной дате, позаботьтесь о заблаговременном прохождении проверки. Можно заранее пройти проверку, а опубликовать на пользователей уже в ручном режиме в желаемую дату.

Часть отчета о тестировании в Google Play

Часть отчета о тестировании в Google Play

Вот так выглядела одна из первых версий:

Хотя, на некоторых устройствах не совсем так:

Google Play предоставляет такие скриншоты при проверке каждой новой версии

Google Play предоставляет такие скриншоты при проверке каждой новой версии

Одна из основных проблем разработки под Android — сделать так, чтобы на всех устройствах выглядело примерно одинаково. На скриншотах выше, например, количество набранных очков выглядит абсолютно по-разному. И это еще не говоря о диалоговом окне в полутора ширины экрана.

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

Anchors — привязка UI элементов относительно краев экрана, официальная документация.

Content Size Fitter — растягивание элементов относительно содержимого, официальная документация.

Safe Area Helper — размещение элементов с учётом особенностей смартфонов с вырезами под камеры, библиотека.

Отдельная камера для UI, туториал на youtube.

Визуальный итог первого спринта:

Иконкой не горжусь. Рисовал ручкой на айпаде в платной программе ProCreate. Именно в плане геймдева не могу рекомендовать, но в целом как программа для рисования пойдет, племянникам нравится.

Итоги спринта:

Рабочий прототип, покрытый базовой аналитикой.

Первую версию Google Play проверял более 4-х суток.

Спустя неделю после релиза игру ожидаемо скачали 0 человек.

Отсутствие установок не было сюрпризом. Игра нигде не рекламировалась, не имела кликбейтового названия и в целом была неким экспериментом в плане игровой механики, так что и по жанру найти невозможно. Первое время мне, даже зная название своей игры, было сложно отыскать ее в Google Play. Название содержало приставку «Chess» и игру перекрывал топ хоть сколько-то популярных шахматных приложений.

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

Фидбек лучше сразу записывать и закидывать в бэклог для дальнейшей приоритезации. Примеры идей, которые я собрал:

Различного рода достижения и бонусы.

Онбординг для новичков, чтобы объяснить правила игры.

Мишени на пешках, чтобы было очевидно, что их можно срубить.

Монетизация free-to-play игр, встроил рекламу (дни 11-18)

Говорят, монетизировать продукт нужно начинать как можно раньше. В идеале даже MVP должен быть платным, чтобы вы понимали, что люди за ваш продукт готовы платить.

В казуальных же играх экономика часто строится на бесплатном продукте со встроенной рекламой. Интересная статья на тему. Таков был и мой план. При том, что цель — заработать 1 доллар за 2 месяца, мне казалось логичным закинуть короткий рекламный баннер на каждую, скажем, четвертую попытку игрока, чтобы копейка-за-копейкой достичь этой цели.

Дни 10-14 заняла проверка гуглом первой версии и новых данных для планирования у меня не было. Решил идти по изначальному плану. Так появился второй спринт, целью которого стало внедрить рекламу:

Встроить рекламу с помощью инструментов Unity оказалось достаточно просто, использовал Unity Mediation. Со всем управился за несколько часов, и у меня еще оставалось время на то, чтобы улучшить саму игру.

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

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

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

Визуальный итог второго спринта:

Получилась какая-то около-японская тематика: сакура, фудзи, древесные кнопки.

Получилась какая-то около-японская тематика: сакура, фудзи, древесные кнопки.

Из интересного: кнопки моделировал в 3D, с прицелом что когда-нибудь добавлю им анимации взаимодействия. Пользовался мощной open source программой Blender. Определенно рекомендую. Потрясает, что продукты такого шикарного качества могут быть опенсорсными.

На моделирование трех уникальных по дизайну кнопок ушло всего пара часов. Полезные видео, которые в этом помогли:

Попутно забавы ради реализовал еще и 3D-фигурку коня. Не пригодилась, но сам процесс мне понравился. Как освоение новой профессии.

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

Итоги спринта:

Внедрил монетизацию в виде рекламы.

Освоил базу 3D-моделирования.

Скачиваний: 3 — скачали друзья. Даже появилась одна оценка в 5 звезд — еще один плюс друзей как первых пользователей.

По итогу за спринт было несколько значимых инкрементов: реклама, UI, комбо-режим. Но при этом я ждал конца спринта, чтобы выкатить их все разом. Поняв бессмысленность такого календаря релизов, в следующие спринты я уже не ждал каких-то дат и релизил сразу, как только было что-то стоящее. Ну и сами спринты сделал короче, т.к. фултайм занимался проектом и продвигался достаточно быстро.

Как я решил отдохнуть от задач: тесты и рефакторинг (дни 19-22)

Не забывайте отдыхать.

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

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

Пример теста на стратегию соперника: ходы фигур рандомные, но если есть возможность срубить, стратегия должна вернуть как ход именно рубку.

Пример теста на стратегию соперника: ходы фигур рандомные, но если есть возможность срубить, стратегия должна вернуть как ход именно рубку.

Итоги «выходных»:

Оптимизировал часть алгоритмов.

Где взять установки?

У игры за предыдущий спринт появился опрятный UI, но по-прежнему не было реальных пользователей, поэтому следующей целью стало их найти.

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

Подготовка креативов для рекламной кампании

Очевидной площадкой для рекламы была Google Ads — самая большая и самая близкая к теме Android. Жена вызвалась помочь с настройкой рекламной кампании. Вот так она описала мне требования для креативов на этой площадке:

Итоговые материалы для рекламы:

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

Два изображения, на основе которых нарезал баннеры по требуемым форматам:

У нас с женой разделились мнения, какое изображение лучше использовать: с плотными полосками или с пунктирными. Благо, запустить рекламную кампанию можно с набором из разных креативов. По итогу вы сможете увидеть, какой из наборов сработал лучше.

Для записи видео использовал встроенный в Unity видео-рекордер. Для создания баннеров подойдет практически любой фоторедактор. Обычно я вбиваю в гугл «фотошоп онлайн» и пользуюсь первым попавшимся.

Неудачная попытка запустить рекламу в Google Ads

Изначально мне не давали зарегистрироваться в Google Ads, т.к. мой платежный аккаунт Google был привязан к России. Перепривязал на свое текущее местоположение — Грузию, официальная инструкция. При этом нужно удалить российские платежные данные, иначе зарегистрироваться так и не даст. Менять страну можно не чаще раза в год.

Через пару дней новая локация проросла, дали зарегистрироваться. Но при попытке запустить рекламу получил бан «за подозрительные транзакции». Подумал, что это связано с тем, что для оплаты я привязал карту сербского банка (жили все лето в Сербии и на карте оставалось немного денег). Однако после изменения платежных данных на грузинские бан не сняли. Писал в поддержку, но объяснения так и не получил. Только пишут, чтобы не пытался создать другой аккаунт — его тоже забанят.

Решил использовать другую площадку.

Закинул игру в профильный чат, завел новые знакомства

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

В чате я познакомился с парнем, который пообещал помочь с первыми установками от реальных пользователей, не накрутка. Мы с ним созвонились и далее мой краткий пересказ того, как работает рынок казуальных игр и как на нем выживают новички. Кто хочет опробовать свою идею игры — может быть интересно и полезно.

Как устроен рынок гипер казуальных игр

Геймдев, как минимум в области гипер казуальных игр, делится на две составляющие: производство и маркетинг. Если производством можно назвать разработчика и, например, дизайнера, то маркетинг — это что-то вроде владельца продукта, аналитика и маркетолога.

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

Разработчик делает прототип игры.

Разработчик добавляет в прототип нужную издателю аналитику.

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

По итогу кампании издатель считает CPI и Retention, чтобы понять потенциал игры. Абстрактно: насколько игра интересна со стороны (люди кликают по рекламе и устанавливают) и насколько игра интересна спустя время (как надолго новые пользователи задерживаются, как активно пользуются).

Дальше есть варианты:

Если игра показывает хорошие результаты — дешево привлечь новых пользователей, а старые задерживаются так, что на них можно заработать — издатель предлагает разработчику контракт. По условиям контракта издатель вкладывает деньги в рекламу, а прибыль сверх затрат на рекламу издатель и разработчик делят, скажем, 50/50. Читайте свой контракт.

Пример: издатель влил в рекламу 100 тысяч долларов -> прибыль с этого, допустим, за месяц за всех пользователей, пришедших с рекламы — 150 тысяч долларов -> издатель забирает 100 тысяч как возврат за рекламу, а остаток вы делите пополам, т.е. ваших — 25 тысяч.

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

Ну и если цифры объективно не очень, скорее всего, будет просто сухой отказ, совет попробовать другой проект.

Из описания выше вместо слова «издатель», кажется, больше бы подошло определение «инвестор». Кто-то с деньгами, готовый инвестировать в вашу игру.

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

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

Всегда держите в голове, что игра может провалиться и придется заниматься чем-то другим.

На что жить, пока делаешь прототип для издателя?

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

Сотрудничество с издателем: добавил аналитику (дни 23-29)

В целом, я и сам мог посчитать и CPI, и Retention. И даже денег на маленькую рекламную кампанию мне было не жалко. Но учитывая, что Google забанил мой рекламный аккаунт, путь меньшего сопротивления был попробовать сотрудничество с издателем. Да и интересен был итоговый фидбек при любых результатах теста. Решил попробовать.

Для издателя было необходимо:

Подключить в проект 2 аналитических SDK: AppMetrica и Game Analytics.

Реализовать отправку нескольких простых событий.

Для трекинга установок подключить SDK запрещенной в России социальной сети. Рекламную кампанию издатель запускал именно в этой сети.

Всё заняло порядка четырех дней. Еще день на доработку креативов под формат рекламной площадки, т.к. требования отличались от Google Ads. Всё сделал, передал издателю.

В ожидании фидбека издателя (дни 30-38)

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

Перед стартом очередного спринта немного переосмыслил бэклог и стратегию: оформил аспекты игры, как некоторые стадии CJM — путь пользователя в игре с течением времени:

С таким бэклогом стало проще фокусироваться на слабых местах в воронке пользователей:

Если мы понимаем, что пользователи не скачивают приложение — проблема на стадии принятия решения, часто в визуале.

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

Если же на предыдущих двух стадиях у проекта всё отлично, но долгосрочный Retention хромает — следует уже поработать над механиками прогресса, соревновательными и клановыми механиками, жизнью в background и т.д.

Так все последующие спринты я практически полностью фокусировался на визуальной и геймплей составляющих, оставляя долгосрочные механики до лучших времен. Монетизация и техдолг, вероятно, должны быть также размазаны по оси CJM. Но мне было удобнее видеть их отдельными столбиками, чтобы не забывать и постепенно выгребать.

С приоритетом стадий разобрался, но в фокусных столбиках все равно было слишком много задач, всё в один спринт не вместилось. Решил еще немного отсеять и приоритезировать.

На основном CJM я отмечал звёздочками реализуемые вещи, не заблокированные чем-либо. Затем отмеченные задачи переносил на две следующие плоскости:

По оси Y на графиках польза и важность задач, у меня эти понятия практически всегда совпадали. По оси X на левом графике оценка усилий для реализации, а на правом — срочность. Оцениваешь задачи, становится очевидным, что сейчас самое срочное, важное и при этом требует адекватных усилий. Шаблоны в miro:

Как в итоге выглядел следующий спринт:

Итоги спринта:

Появился полноценный симпатичный туториал. На клетках для рубки появились мишени. Оба улучшения призваны помочь новым пользователям сориентироваться в правилах игры.

Устаканились инструменты для планирования. Далее схему не менял.

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

Музыкальное оформление (дни 40-50)

Одна из важных вещей, влияющих на впечатление от игры — это звуки и музыка.

За тот месяц, что игра в сторе, я набросал саундтрек на айпаде в бесплатной программе GarageBand. Штука крутая, рекомендую. Использовал китайский и японский набор инструментов, под стать визуальному оформлению.

Интерфейс программы GarageBand

Интерфейс программы GarageBand

Музыку выложил в open source, может кому-нибудь пригодится:

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

Сами кнопки реализованы все в том же Blender, и импортированы в проект как 3D-модели. При клике кнопка поворачивается к пользователю другой стороной. А при множественном клике градус поворота накапливается и происходит ускорение. Мелочь, большинство пользователей вряд ли заметит, а мне нравится.

Выложил пакет 3D-моделей со скриптами в Unity Assets Store.

Отдельно скрипты для вращения 3D-объектов по клику.

Туториал как в Unity вставить 3D-объект в UI.

Второе попавшее в спринт улучшение касалось геймплея. Добавил во вражеский ассортимент слона и коня, разнообразил геймплей.

Скрины планирования прилагать уже не буду. Вот таким получился спринт:

Итоги спринта:

У противника в ассортименте появились слоны и кони.

Добавил музыкальное сопровождение.

Результаты от издателя: CPI $3.26, отказ

По ходу спринта заметил на графиках всплеск новых пользователей. Так я понял, что запустили рекламу. По данным Google Play, пришли 10 человек.

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

В рекламной кампании крутилось 3 видеоролика. На каждом из них просто запись экрана во время игры. Мне рекомендовали играть для видео немного «тупя». Это должно было замотивировать потенциальных пользователей скачать игру и «показать, как надо». Кому показать? История умалчивает. Но чувство знакомое, видел подобную рекламу и также хотелось кому-то что-то показать.

Мое личное видение игры — это что-то драйвовое, во что скучно играть тупя. Результаты по CPI это больше подтверждают, чем опровергают. Так для кампании я отдал издателю 3 ролика разного рода «сообразительности» игрока. Кодовые названия: Hard, Medium и Easy. От самого умелого пользователя до наименее умелого.

Наилучший CPI =

Наилучший CPI = $3.26 показало Hard видео

Мне сказали, $3.26 — это очень много. Т.е. новых пользователей привлекать очень дорого.

По итогу рекламной кампании мне посоветовали попробовать вложить силы в другой проект.

Тут можно, конечно, задать вопросы:

Можно ли доверять числам, полученным на такой небольшой выборке: всего 400 показов по ролику Hard?

Был ли какой-то таргетинг у рекламы? Например, на тех, у кого уже установлено одно из шахматных приложений.

Может быть рекламные креативы выглядели непривлекательно?

В открытых исследованиях нашел, что в 2021 году году средний CPI для казуальных игр был в районе $2. При этом в Северной Америке CPI в среднем на уровне $6,36 для всех казуальных игр, а реклама от издателя как раз была направлена в основном на Штаты.

Как бы то ни было, фидбек издателя — не приговор, и прежде чем сдаться я решил проверить еще пару гипотез:

Попробовать запуститься на iOS с условной ценой за установку в $1. Посмотреть, насколько хорошо работает такая монетизация.

Попробовать самостоятельно провести рекламную кампанию с новыми креативами. Пройти, так сказать, весь путь.

Неудачная попытка запуститься на iOS

Чтобы иметь возможность зарелизить приложение или игру на iOS, нужен Apple Developer Account. Регистрируется он в специальном приложении из AppStore.

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

По сети видел подобные сообщения, решения — не видел. Других путей зарелизить на iOS не знаю. Видимо, не в этом году.

Попутно еще посмотрел возможность зарелизить в какие-нибудь китайские магазины приложений. Google Play в Китае не доступен, а аудитория миллиардная. Все локальные магазины требуют наличие юрлица в Поднебесной. Для меня это пока тоже не вариант.

Запуск собственной рекламной кампании

Цели ставил такие:

Самостоятельно пройти этапы рекламы и анализа данных по привлечению.

Поэкспериментировать с новыми креативами, которые потенциально будут работать лучше.

Google Ads отпал. Из других площадок выбрал Unity, как простейшую в оформлении: доступ к платформе осуществляется из личного кабинета Unity, который у меня уже был.

Наученный горьким опытом первым делом пошел проверять юридические и финансовые возможности запустить рекламу.

Пополнение бюджета через PayPal как отдельное приключение

Я был готов потратить до $100 на рекламу. Единственный возможный способ пополнить бюджет в Unity — это PayPal, американская компания, приостановившая регистрацию россиян в марте этого года. Но я же в Грузии, решил попробовать.

При пополнении бюджета Unity перенаправляет на PayPal. Если нет аккаунта, предлагает зарегистрироваться. Но при регистрации для выбора нет как страны Russia, так и национальности Russian.

Та же история, если пробовать с браузера на телефоне. Мобильное приложение не скачать, т.к. оно не распространяется в Грузии. Полагаю, не распространяется и в России.

Но я нашел обходной путь. Дальше кейс из разряда «не повторяйте это дома»:

Зашел на сайт PayPal напрямую, не по редиректу с Unity.

Начал регистрацию по номеру телефона.

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

При дозаполнении данных существующего аккаунта уже есть опция Russian. Всё ввел, сохранил. Так далеко я еще не заходил.

Указал для платежей сербскую карту.

Не теряя времени, вернулся в Unity и пошел пополнять бюджет для рекламной кампании.

Unity редиректит в PayPal.

Куки говорят, что я уже авторизован — попал сразу на страничку оплаты.

Выбрал карту, смс-код от банка. Пара секунд и деньги на моем счету в Unity.

Буквально через 10 минут мне пришел email от PayPal, что из-за подозрительных транзакций действие моего аккаунта приостановлено. Попросили предоставить им дополнительные данные, среди которых паспорт. Всё предоставил, спустя две недели аккаунт все-таки разморозили. Но в тот момент рабочий PayPal мне уже был не нужен, средства были на аккаунте Unity, и рекламу я мог оплатить.

Подготовил новые динамичные креативы

Страна распространения: США

Дневной бюджет: $50

Бюджет всей кампании: $100

4 дня кампании, разница между Bid $1 и $3

Bid — это максимальная цена, которую я готов платить за каждый клик по моей рекламе. Unity рекомендует выставлять его как мой целевой CPI, выбрал $1. Рекламные алгоритмы стараются оптимизировать показы так, чтобы цель по CPI была достигнута. Всю кампанию я делю на два исторических этапа именно по тому, какой Bid я выставлял.

График производительности кампании за три дня с Bid = $1:

Показы, установки и затраты — это числа разного порядка. Для каждого показателя по оси Y шкала своего цвета.

Показы, установки и затраты — это числа разного порядка. Для каждого показателя по оси Y шкала своего цвета.

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

Запускал поздно вечером 7 ноября. Из первых четырех просмотров получилась одна установка. Перед сном у меня было приподнятое настроение. Но всё пришло в норму уже на следующее утро, где на 80 просмотров оставалась всё та же одна установка. На третий день больше всего показов, но вообще ни одной установки.

Статистика за три дня:

CPI уже чуть лучше, чем у издателя, но все равно хуже, чем нужно. При этом очень много времени занимает получение результатов, очень мало показов ежедневно — так влияет Bid. Решил ради эксперимента поднять Bid до $3.

График за девятое и десятое ноября. Девятого Bid равен

График за девятое и десятое ноября. Девятого Bid равен $1, десятого — $3

Показы и затраты значительно выросли, а вот установки — нет.

Статистика за четвертый день:

Дорого. Кампанию остановил.

На этом я оставил надежды на дальнейшее развитие проекта.

Немного аналитики

Все числа привожу на 18 ноября, в завершение работы над данной статьей.

От первой строчки кода до заморозки проекта прошло 2 месяца и 3 дня.

Рабочие дни от нерабочих отделить сложно, но суммарно дней 10 я вообще не прикасался к ноутбуку.

В среднем в неделю я тратил на проект 25-30 часов. Не помню ни дня, чтобы я сидел больше пяти часов.

По занятости я бы оценил так:

30% — написание кода.

30% — вся дизайнерская часть: иконки, баннеры, кнопки и т.д.

20% — взаимодействие с издателем: внедрение аналитики, подготовка креативов.

10% — создание саундтрека, написание музыки.

10% — всё остальное: планирование, тестирование, работа с различными платформами.

от издателя: $3.26

от своей кампании: $2.6

На свою рекламную кампанию потратил $51.5, остальные инструменты бесплатные, либо были мною оплачены ранее, как например аккаунт разработчика Google Play.

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

Все эти показы суммарно принесли мне $0.077 — почти 8 центов.

До пользователей доставлено 15 версий игры, из которых 3 — хотфиксы

Всего установок: 40

Среднее количество одновременно активных установок:

10+ дней: около нуля

Среднее время в игре за сессию: 2 минуты 23 секунды

Итог и дальнейшие планы

Вначале у меня была цель заработать хотя бы 1 доллар. За 2 месяца получилось заработать почти 8 центов на рекламе.

Замораживать то, во что вложил свои силы и эмоции — немного расстраивает, но за несколько дней отпускает. У меня есть свежие идеи других игр и с багажом новых знаний мне кажется вполне реальным пройти весь цикл с издателем в рамках месяца. Плюс в этот раз подключу знакомого дизайнера, должно выйти привлекательнее. Параллельно начну искать работу, как минимум на частичную занятость.

Точно ни о чем не жалею: отдохнул от «горящего энтерпрайза», приобрел новые интересные навыки, прикоснулся к самой творческой части IT-индустрии и довел игру до релиза. Даже выпустил десяток версий и улучшений.

Полезные материалы

Отдельно выделю то, что не вошло в основное повествование, но определенно повлияло на меня:

Выступление на конференции Джона Ромеро про историю становления id Software.

Большая серия коротких обучающих видео по Blender.

Особенно запомнилось видео про 3 точки света — технику, вероятно, знакомую всем фотографам и видеоблогерам.

Как быстро написать игру для Android на Unity

Обложка: Как быстро написать игру для Android на Unity

В нынешнее время каждый может стать успешным разработчиком мобильных игр или приложений, не прилагая к этому титанических усилий. Примером такого случая является Донг Нгуен, разработавший Flappy Bird. В игре не было никакой сложной механики или графики, но это не помешало ей стать популярной и приносить своему создателю по пятьдесят тысяч долларов в день. Однако в игре не было ничего примечательного. Всё, что потребовалось для успеха, — оказаться в нужном месте в нужное время и немного удачи. Подобное может произойти и сегодня, вам просто нужна правильная идея.

Чтобы продемонстрировать, насколько легко написать что-то подобное, сегодня мы напишем свой Flappy Bird с помощью Unity всего за 10 минут.

Игровой персонаж

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

Загрузите свой спрайт птицы в сцену. Не забудьте включить фантазию!

Затем отрегулируйте размер спрайта как вам нравится, перетягивая его за угол в нужном направлении. Спрайт должен быть виден в окне иерархии ( hierarchy ) слева. В нём видны все объекты в сцене, и на данный момент их должно быть всего два: камера и птица.

Перетащите камеру на птицу и отпустите. Камера должна оказаться под птицей, это будет значить, что камера теперь «ребёнок» птицы. Теперь позиция камеры будет фиксироваться относительно птицы. Если птица двигается вперёд, то камера делает то же самое.

unity

Снова выберите птицу в сцене или в окне иерархии. Вы увидите список опций и атрибутов справа в окне под названием Inspector . Здесь вы можете управлять различными переменными, привязанными к определённому объекту.

Теперь нажмите на Add Component . Выберите Physics2D > Rigidbody2D — это готовый набор инструкций для применения гравитации к нашему персонажу. Нажмите на Constraints в этой панели и затем выберите freeze rotation Z . Это позволит предотвратить вращение птицы вместе с камерой по кругу.

Таким же образом добавьте Polygon Collider , который говорит Unity, где находятся границы персонажа. Нажмите Play и увидите, как спрайт вместе с камерой бесконечно падает вниз.

unity

Пока всё идёт хорошо!

Теперь пора заняться полётами персонажа, благо это будет несложно.

Сначала нужно создать C#-скрипт. Создайте для него папку (кликните правой кнопкой мыши где-нибудь в assets и создайте папку «Scripts»), сделайте клик правой кнопкой мыши и выберите Create > C# Script .

Назовём его «Character». Кликните по нему дважды, чтобы открыть его в вашей IDE, будь то MonoDevelop или Visual Studio. Затем добавьте следующий код:

Этот код делает две вещи. Он заставляет персонажа двигаться вперёд со скоростью, которую мы определим в инспекторе, и создаёт ощущение полёта птицы. Метод Update() вызывается повторно на протяжении игры, поэтому всё, что вы сюда поместите, будет выполняться непрерывно. В данном случае мы добавляем немного скорости нашему объекту. Переменная rb является скриптом RigidBody2D , который мы применили к нашему объекту ранее, поэтому когда мы пишем rb.velocity , мы обращаемся к скорости объекта.

Тап по экрану интерпретируется Unity как клик мыши, если вы используете мобильное устройство. После нажатия мы заставляем персонажа немного подняться вверх.

Переменная moveSpeed будет отвечать за скорость движения, а переменная flapHeight — за увеличение высоты полёта птицы после каждого нажатия. Поскольку эти переменные объявлены как public , мы сможем изменить их вне скрипта.

Метод Death() тоже объявлен как public , что значит, что другие объекты и скрипты смогут его вызвать. Этот метод просто возвращает положение персонажа в начало. Также он будет использоваться каждый раз, когда персонаж будет залетать слишком высоко или низко. Скоро вы поймёте, почему он объявлен именно как public . Строка rb.velocity = Vector3.zero; нужна, чтобы убрать импульс — мы же не хотим, чтобы после каждой смерти персонаж падал всё быстрее и быстрее?

Теперь можно выходить из IDE и добавлять скрипт как компонент к персонажу. Для этого нужно выбрать нашу птицу и нажать Add Component > Scripts > Character . Теперь мы можем определять moveSpeed и flapHeight в инспекторе (для этого и нужны public -переменные). Присвоим переменным значения 3 и 5 соответственно.

И ещё: в инспекторе нужно добавить тег к персонажу. Для этого кликните там, где написано Tag: Untagged и затем выберите Player в выпадающем списке.

Препятствия

Теперь добавим препятствия: трубы. Кто-то в трубах находит грибы, а кто-то — свою смерть.

Перетащите спрайт трубы в сцену в место, где должно быть первое препятствие, и назовите его pipe_up .
Теперь создадим новый скрипт под названием Pipe :

Добавьте этот скрипт к спрайту трубы тем же образом, что и раньше. Таким образом, труба будет возвращаться на экран после выхода за его левую границу. Мы тут ещё ничего не сделали, но ещё вернёмся к этому.

Метод OnCollisionEnter2D() вызывается каждый раз при взаимодействии трубы с персонажем. После этого вызывается созданный ранее метод Death() , возвращающий игрока в начальную точку.

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

Перевёрнутые трубы

Сейчас у нас есть только один спрайт трубы. Давайте добавим ещё один. Для этого кликните правой кнопкой мыши в окне иерархии, нажмите New 2D Object > Sprite и затем выберите спрайт, который хотите использовать. Ещё проще будет просто перетащить файл в сцену ещё раз.

Назовите этот спрайт pipe_down . В инспекторе в части Sprite Renderer выберите опцию Flip Y , чтобы перевернуть трубу вверх ногами. Добавьте такое же RigidBody2D .

unity

Теперь напишем новый C#-скрипт под названием PipeD . В нём будет похожий код:

Префабы

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

Если пойти первым путём, то убедиться, что трубы стоят как надо после случайной генерации, и поддерживать честный ход вещей было бы сложно. После смерти персонажа они могли бы появиться в километрах от первой трубы!

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

Вместо этого давайте воспользуемся префабами. Если говорить просто, то мы превратим наши трубы в шаблоны, которые потом сможем использовать для эффективного создания большего количества труб по желанию. Если тут есть программисты, то считайте скрипт Pipe классом, а трубы — экземплярами этого объекта.

unity

Для этого создайте новую папку «Prefabs». Затем перетащите pipe_up и pipe_down из окна иерархии в папку.

Каждый раз, когда вы перетаскиваете объект из этой папки в сцену, у него будут те же свойства, поэтому вам не нужно будет постоянно добавлять компоненты. Более того, если вы измените размер компонента в папке, это повлияет на все трубы в игре, и вам не придётся изменять каждую из них отдельно.

Как вы понимаете, это сильно сэкономит наши ресурсы. Также это означает, что мы можем взаимодействовать с объектами из кода. Мы можем создавать экземпляры наших труб.

Сначала добавьте этот код в условное выражение в методе Update() скрипта Pipe , которое мы оставили пустым:

Это нужно для создания экземпляра нашего gameObject . В результате получается новая идентичная копия. В Unity всегда, когда вы используете слово gameObject , оно ссылается на объект, к которому скрипт в данный момент привязан — в нашем случае к трубе.

Мы генерируем заново наши трубы в случайных вариациях, чтобы было повеселее.

unity

Но вместо того, чтобы проделывать всё то же в скрипте PipeD , мы генерируем оба объекта в одном месте. Таким образом мы можем легко устанавливать положение второй трубы относительно первой. Также это значит, что нам нужно меньше кода для PipeD .

Создайте public gameObject с именем pipeDown . Затем обновите код следующим образом:

Мы добавили переменную gapRan , которая позволяет слегка менять расстояние между трубами, чтобы было интереснее играть.

Возвращаемся обратно в Unity и перетаскиваем префаб pipe_down из папки с префабами (это важно!) в место, где написано «Pipe Down» (заметьте, как наш camel case заменяется пробелом) на спрайт трубы pipe up . Если вы помните, мы определили Pipe Down как public gameObject , что даёт нам возможность определять, чем является этот объект откуда угодно – в данном случае через инспектор. Выбирая префаб для этого объекта, мы убеждаемся, что при создании экземпляра трубы он будет включать в себя все атрибуты и скрипт, которые мы добавили ранее. Мы не просто создаём спрайт, но пересоздаём объект с коллайдером, который может убить персонажа.

Всё, что мы добавим в то же место в скрипте PipeD — просто Destroy(gameObject) , чтобы труба саморазрушалась при выходе за левую границу экрана.

Если вы сейчас запустите игру, то экран будет продвигаться дальше автоматически, и вы умрёте, если столкнётесь с любой из труб. Пролетите достаточно далеко, и эти трубы исчезнут и появятся снова впереди.

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

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

Бесконечный полёт

Теперь создадим public -переменные pipe_up и pipe_down в скрипте Character . Это даст вам возможность ссылаться на созданные объекты, перетаскивая префабы на объект персонажа, прямо как когда мы добавили pipe_down в скрипт Pipe .

Нам нужно добавить эти переменные:

Затем мы напишем такой метод:

Мы будем вызывать его один раз в методе Update() и один раз в методе Death() .

После начала игры вызывается Update() , и наши трубы ставятся согласно заданной конфигурации. За счёт этого первые несколько препятствий всегда будут стоять на одном и том же месте. После смерти игрока трубы встанут на те же самые места.

Вернитесь в сцену в Unity и удалите две трубы, которые сейчас там находятся. Ваша «игра» будет выглядеть просто как пустой экран с птицей. Нажмите Play и трубы появятся, после нескольких первых их положение будет определяться случайным образом.

В заключение

Вот мы и сделали целую игру! Добавьте счётчик очков, попробуйте сделать его более оригинальным и увеличивайте сложность игры по мере продвижения. Также не будет лишним сделать меню. Ещё хорошей идеей будет уничтожать трубы на экране после смерти персонажа. Как только вы с этим закончите — считайте, что готовая к выпуску в Play Store игра у вас в кармане! Когда-то похожая игра сделала другого разработчика очень богатым, и это доказывает, что вам не нужно быть гением-программистом или иметь за своей спиной богатого издателя, чтобы достичь успеха. Вам просто нужна хорошая идея и десять минут!

Хотите писать приложения под Android, но не знаете, с чего начать? Тогда ознакомьтесь с нашей большой подборкой ресурсов для изучения Android-разработки.

Как сделать мобильную RPG игру в одиночку, без программирования и бюджета

Хочу поведать вам свою историю, как мне удалось сделать мобильную RPG игру в одиночку, без программирования и бюджета. Это был непростой путь, длинной в целых 2 года. Но чтобы вы лучше понимали всю историю расскажу для начала с чего всё начиналось.

Я фанат мобильных игр. Возможно кто помнит, лет десять-пятнадцать назад у всех были кнопочные мобильные телефоны, в которых можно было загружать java приложения. Это могли быть как простенькие аркады, так и вполне серьёзные RPG и стратегические игры. Каждая такая серьёзная игра не переставляла удивлять глубиной и разнообразием. И как только разработчикам удавалось вопреки всем аппаратным и программным ограничениям делать настолько глубокие шедевры?!

Это были игры, в которых ещё не было никакого free-to-play. Каждая новая игра была открытием. Чувствовалось, что разработчики вкладывали душу в свои проекты. И делали свою работу максимально качественной, чтобы игроки покупали их игры снова и снова. С большими надеждами я ждал то время, когда производительность мобильных устройств возрастёт, а вместе с ней увеличится и масштаб игр.

И первое время так и было. Помните первые крупные мобильные игры, которые появлялись на новых смартфонах? Galaxy on Fire 2, серия Asphalt, Modern Combat. Удивительно, но все эти игры являются портами одноименных java-хитов. Время шло вперёд, стали появляться всё более и более мощные устройства. Увеличивались размеры экранов. И вроде бы вот она, золотая эпоха мобильных игр, когда полёт творческой мысли создателей уже больше ничем не ограничен.

Но, к сожалению, с каждым годом игры всё больше и больше переставали быть местом для творчества. Теперь это крупный бизнес, в котором крутятся большие деньги. Больше никаких новых идей, только копирование друг друга. Мне, как ценителю стратегий и RPG стало больно смотреть во что превратились современные игры. Теперь, стратегиями называют всякого рода фермы, которые клонируют геймплей либо Clash of Clans, либо Game of War. На игроков многие разработчики смотрят лишь как на кошелёк с деньгами, который нужно регулярно трясти, чтобы получить больше денег.

А самое большое разочарование, что в современных играх, деньги стали решающим фактором, определяющим успех игрока. Хочешь мощное оружие — только сегодня и только для вас, новый меч «Пожинатель душ 2000» всего за 9.99$. Хочешь улучшить цитадель — жди 999 лет или заплати 299 рубинов(кристаллов/золота/кредитов/алмазов, подчеркнуть нужное) и сможешь построить здание прямо сейчас. Хочешь побеждать, не прикладывая ради этого никаких умственных усилий — заплати 4.99$ и сможешь победить Васю в неравном бою, имея огромное преимущество.

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

Итак, что у меня было: отсутствие знаний программирования, бюджета на разработку и наличие подлинного желание сделать хорошую игру. Потому, всё (кроме бесплатных звуков и иконок) пришлось делать самостоятельно, что называется ручками. А всё что делал не сам было взято из бесплатных ассетов. Ну, как гласит известная мудрость «мы там, где мы есть, с тем что у нас есть и делаем с этим то, что можем делать». И мы либо делаем что-то с тем, что имеем либо не делаем вообще ничего.

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

Идея замечательная, но как и в любой другой современной мобильной стратегии, здесь был очень сильный донат. За деньги другие игроки могли покупать более крутые корабли и лучше прокачивать любые характеристики. Тактика и стратегия уступала месту тугому кошельку. Играя без доната (или с относительно небольшим донатом) прокачка вашего аккаунта напрямую зависела от влияния рандома. Вам может повезёт и вы получите из ящика заветный корабль. А может и не получите. За N-сумму денег вы получаете корабль гарантированно. И так практически с каждым аспектом игры.

Потому я решил взять за основу боевую механику из Galaxy Legend, где-то её упростить, а где-то сделать более сложной и продуманной. Упор я решил сделать в разнообразии способов прокачки. Вы сражаетесь, зарабатываете ресурсы, вкладываете их в прокачку нужного вам билда и сражаетесь дальше, имея более лучший корабль и более сложных и интересных соперников.

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

Разные типы атак по-разному влияют на ход боя. Например, критический удар понижает аккумулятор соперника, а в случае блокировки вражеской атаки аккумулятор, напротив, заряжается. Большой игровой опыт позволяет взять всё самое лучшее из того, что когда либо играл, соединить эти идеи друг с другом и получить новые механики.

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

Таким образом, любой ваш корабль обладает своим собственным набором преимуществ и недостатков. Точно также, как и корабли противника. Это своего рода головоломка, которую игроку необходимо решить. И против каждого серьёзного врага необходимо корректировать свою тактику: выбрать другое умение, переназначить должности членам экипажа, установить другой набор энергитических кристаллов и т.д.

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

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

Также, я решил в качестве эксперимента добавить режим кликера, в котором можно добыть основные ресурсы, использующиеся для прокачки корабля (некоторые ресурсы добываются только в бою). Сперва нужно добыть энергию, а уже за энергию добываем кредиты и техн. очки. Максимальный запас ресурсов ограничен, но его можно увеличивать (за те же ресурсы), как можно и увеличивать скорость добычи. Это было сделано в первую очередь для того, чтобы сражения не превращались в гринд ресурсов.

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

Итак, я решил делать игру без доната. Но как же разработчику заработать на хлеб с маслом? Делать игру платной — означает похоронить её ещё до выхода, т.к. мало кто рискнет потратить деньги на игру от никому неизвестного разработчика. Пожертвования, на мой взгляд, работают только в случае крупных и хорошо раскрученных проектов. Потому, остаётся только реклама. Но превращать игру в рекламную помойку тоже не хочется. Значит, реклама должна быть только вознаграждаемой.

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

После недолгих поисков движков, позволяющих делать игры без программирования, выбор пал на Construct 2. Принцип его работы в том, что у нас есть сцена (где мы расставляем объекты), есть сами объекты и есть лист событий, в котором мы вручную прописываем события (состоящие из условий и действий), т.е. взаимодействие объектов друг с другом. События можно объединять в группы, можно делать подсобытия с дополнительными условиями. Объектам можно задавать свойства, поведение, переменные и т.д. По-сути, можно реализовать абсолютно любую игровую механику (в рамках 2D игры). Всё упирается в вашу фантазию и умение решать логические задачи.

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

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

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

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

Когда я ещё обдумывал идею игры, то для начала хотелось создать что-то не слишком сложное, чтобы просто набраться опыта в создании игр. Но чем больше я думал над концепцией, тем больше и больше приходило новых идей. От реализации некоторых пришлось (временно) отказаться, чтобы закончить разработку. Отметил для себя одну важную вещь. Если вы решаете убрать фичу из игры и при этом испытываете чувство облегчения — значит вы принимаете правильное решение. Сложно отказываться от своих хотелок, но если этого не делать, то разработка не закончиться вообще никогда.

От чего пришлось отказаться (основное):

1. Мультиплеер. Да-да. Свою первую игру я хотел сразу же сделать с мультиплеером. Самой трудно задачей в этом деле было придумать, как сделать защиту от нечестных игроков. Даже топовые онлайн игры вкладывают огромное количество ресурсов в защиту своей игры от взлома. Куда уж там мне, в одиночку бороться против читеров..

Чтобы создать хотя бы минимальную защиту нужно делать для игры серверную часть. А для этого нужно знать на продвинутом уровне серверные технологии, базы данных, php, MySQL и AJAX. Как оказалось, это слишком сложная задача для одного человека, который трудится над своей первой игрой.

2. Открытый мир и сложные игровые режимы. Чтобы игровой процесс был ещё более масштабным мне хотелось добавить в него т.н. «глобальный геймплей». Открытый мир, фракции, торговля, война корпораций и чтобы игрок во всём этом активно участвовал.

Однако позже я понял, что реализация подобных идей, продумывание всех деталей и мелочей займёт столько времени, которое я просто не могу себе выделить. Сложность ещё в том, что когда ты делаешь игру, которую никто не ждёт и о которой никто ничего не знает, то есть неприятное чувство, будто ты делаешь что-то «в пустоту». Потому, чем скорее в твою игру начнут играть реальные люди, чем быстрее ты начнёшь получать отзывы от своей аудитории — тем лучше.

Так что я считаю, что фичекат — это гениальная вещь. Она позволяет убрать из игры всё лишнее, недоработанное, сырое, оставить лишь только самые проверенные и интересные механики.

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

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

За основу иконки взял спрайт космического корабля из своей же игры. Просто и минималистично. Возможно, в будущем воспользуюсь услугами художника для создания профессиональной иконки для приложения.

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

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

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

1. Делайте игру для себя. Это моё главное правило. Если для вас создание игр — это, прежде всего, творчество, то делайте игру такой, в которую вы бы сами с огромным удовольствием играли. Не пытайтесь угодить всем, ведь люди все разные и вкусы у всех сильно отличаются. Одни люди предпочитают мясо, другие капусту. Если вы будете делать голубцы, то вероятно, ваша игра может не понравится ни тем, ни другим. Со временем вашу игру найдут люди со схожими игровыми предпочтениями. И это будет ваша самая преданная аудитория.

2. Научитесь адекватно смотреть на свои возможности. Если вы хотите сделать убийцу World of Warcraft, то вам нужно понимать, что у вас нет такого количества опыта, времени и денег, необходимых для создания AAA-игры. Такие игры создаются годами командами в несколько десятков, а то и сотни человек. И у каждого из них есть своя профильная задача: кто-то занимается боевой анимацией, кто-то текстурирует растительность, а кто-то программирует игровую физику. Одному человеку и жизни не хватит, чтобы потянуть всё это.

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

Искренне надеюсь, что статья была вам полезна и вдохновила на создание своей собственной игры. На этом, пожалуй, всё, всем удачи!

Все таки не надо путать «без программирования» и «без написания кода».

Программирование — это процесс создания программы. Он требует хотя бы базовых знаний алгоритмизации, понимания игровой логики и много чего еще. А то что вы не пишите код руками, а соединяете логические блоки в интерфейсе движка, это все ещё программирование.

У меня есть несколько знакомых, которые хотели с наскоку сделать игру в Construct или Game Maker’e, но очень быстро обломились, потому что думали, что там «не надо программировать». Оказалось программировать все таки надо, а вот код писать нет.

Пишу просто чтобы не вводить новичков в заблуждение. За то что поделились опытом — респект.

Более того, писать код проще и быстрее, чем соединять лоигческие бооки в интерфейсе движка )

автор — ты молодец! добавь картинок людей в игру с диалогами типа тутора и пр.
а на иконку игры — даму с бюстом от 3го размера — установки попрут. )

Орущую во весь рот даму с бюстом от 3го размера*

Отличный пост. Спасибо, что поделились опытом. Прада вот это, имхо, неверно, никогда не встречался с таким «стереотипом»

Почему-то есть стереотип, что игры без программирования обязательно используют какие-то шаблоны

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

Респект и окупаемости инди-разработчикам!
4.5 звезды игру это отличнейший результат.

Вы, кстати, посчитали, при каком количестве скачиваний и среднем времени в игре на скачивание наступит та самая условная окупаемость?

Когда будет что рассказать буду рад поделиться опытом и напишу отдельную статью на эту тему.

Спасибо за советы!

Что по деньгам то?

По деньгам пока очень рано говорить. Игра бесплатная, с вознаграждаемой рекламой. Продвигаюсь сам, без издателя.

Сотня инсталлов, 18 оценок, все с 8 февраля. Каких то доходов серьезных не будет и на сотне тысяч инсталлов.

Ситуация которая сейчас сложилась в мобильных играх это следствие большой большой конкуренции(проблема видимости продукта), темпа реальной жизни (сессионность, ускорение таймеров), необходимости жесткой монетизации (отсюда f2p) и людской психологии( стремление быть лучше чем другие за счёт доната).
Желаю удачи автору, боюсь правда его ждёт разочарование. Уж очень мал шанс того что игра сможет получить достаточно траффика в конкуренции с 200ым клоном того же Game of War.

На скрине java игры: Revival, Первобытные войны и HTBG. Современных аналогов, к сожалению, на Андроид нет..

Попробуй серии Advance Wars и Fire Emblem, они выходили на GBA. Чтобы сейчас в них поиграть, достаточно установить на телефон эмулятор (в плеймаркете их есть) и скачать rom-файлы этих игр с любого сайта в выдаче гугла =)

На iOS игра не планируется?

На ближайшее будущее не планируется..

Автор молоток!
Где этот финансовый чувак, который хочет в геймдев?

Люблю такие истории. Рад, что тебе довелось довести дело до конца)

И всё-таки есть противоречие в твоих словах. В пункте про движок ты пишешь, что использование шаблонов вместо написания кода не ограничивает возможности. А в фичекате — про отказ от мультиплеера из-за отсутствия знаний серверных языков программирования и бд.

Всё-таки рано или поздно появляются сложные вещи, где приходиться лезть в код. Тем не менее, твой пример показыает, что можно обойтись без них и это норм

Да, пожалуй, мультиплеер — это единственное исключение. Средства движка хоть и позволяют сделать онлайн в игре, но защита против взлома получается слабая. Хотя, не исключаю, что я ещё не до конца во всём разобрался. Знание кода, конечно, огромный плюс. Если у человека это знание есть, то жизнь становится гораздо легче)

Интересно было прочитать пост, спасибо. Автоматический апвоут за игру на C2 🙂 Сам на нём же сижу (пилю второй проект). А так, я бы сказал, что услуги художника вам, возможно, всё же не помешают (ну или в библиотеках платных/бесплатных ассетов покопаться). Сейчас графика выглядит неплохо, но немного скучновато чтоли (на мой вкус). Самый удобный вариант был бы нанять художника и попросить его перерисовать спрайты покрасивше, так сказать. Можно даже ему дать исходники, чтобы переделанные варианты были таких же габаритов. А потом просто все спрайты заменить в движке и дело с концом. И еще, некоторая информация написана довольно мелким шрифтом. Думаю, неплохо было бы с этим что-то сделать, чтобы людЯм зрение не сажать) P.S. Как сказал один из комментаторов, это всё же программирование. Просто оно называется визуальным. Пусть в подобном движке и условно "легче" делать игры, но при этом нужно это всё заставить работать самым эффективным образом, особенно если релизиться на мобильных устройствах. P.S.S. Если нужно, могу кинуть инвайт в чат в Дискорде, где сидят довольно много разработчиков и там всегда можно получить фидбэк или совет (при условии, что вы не будете злоупотреблять этой возможностью, конечно). Там, правда, только английский в ходу, но если с этим нет проблем, то велкам)

Нанять художника — это отличная идея, но пока на это нет денег 🙂 Игра всё же нишевая, и с моей стороны было бы наивным рассчитывать на огромную популярность (а следовательно и доход). За конструктивный отзыв спасибо!

Честно говоря, мне не очень нравится кликерная механика добычи энергии. Лично мне был бы более интересен вариант с постройкой на захваченных планетах каких-нибудь условных фабрик, которые бы производили энергию в офлайн-режиме. Т. е. более привычный вариант для мобильных игр. Поскольку тратить время вот на это кликанье совершенно не хочется.

Впрочем, возможно, идеальным вариантом было бы совмещение обеих механик. Захотел — накликал, захотел — подождал.

Энергия добывается и в оффлайн режиме, такое тоже есть. Полное восстановление происходит за 8 часов. И не только энергия, но и все ресурсы, которые добываются в кликере. Можно утром зайти, поставить улучшение, сыграть пару боёв, за полученные в ходе сражений ресурсы ещё прокачаться и выйти, не играть до вечера. Можно пройти всю игру вообще без кликера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *