Как два студента сделали игру для iOS и заработали на этом

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

В закладки
Аудио

Первые шаги

Вообще, мы C++-разработчики, раньше уже пытались сделать кросс-платформенную игру, используя известные нам инструменты — Qt и C++. Тогда мы работали над игрой в жанре Tower Defence в новогоднем сеттинге. Для погружения в атмосферу инди-разработки предлагаю посмотреть пару видео из того времени:

Низкое FPS
Белый прямоугольник

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

Второе дыхание

В какой-то момент мы решили изучить нативные инструменты разработки. А именно SpriteKit на iOS. Я накидал демку на Swift, в которой было 1000 движущихся спрайтов с альфа-каналом. Она заняла всего пару десятков строк кода и выдавала 60 FPS на iPhone 5! Это был просто восторг! Низкий порог входа и бешеные возможности встроенного движка снова разожгли в нас энтузиазм!

На этот раз мы сформулировали основную цель так: Игра должна быть в AppStore! Она просто не может отправиться ко всем остальным недоделанным проектам на задворки «гитхаба»! Это означало, что игра должна быть настолько простой, чтобы её нельзя было не сделать. Пора начать доделывать дела!

Мы не могли себе позволить вручную создавать уровни, так как после создания игровой механики энтузиазм мог угаснуть. Поэтому думали сделать раннер или платформер с одним бесконечным уровнем. Как Subway Surfers, Doodle Jump, Nyan Cat или Flappy Bird. Также мы хотели минимизировать количество текста, чтобы не возиться с локализацией.

Вижу цель

Так что мы придумали? Беглое изучение инструментов разработки под iOS показало, что встроенный двумерный физический движок просто огонь! Разработка под него выглядит примерно так:

  • Создать физический мир.

  • Добавить объект мяч в физический мир.

  • Добавить объект пол в физический мир.

  • Включить гравитацию!

Можете представить себе эмоции программиста, который до этого два месяца жонглировал указателями?

Разумеется, мы решили использовать физику в качестве основного элемента игры. Какую игру с бесконечным уровнем на основе физики можно сделать с мячом? Чеканку мяча!

По задумке игрок должен управлять ногой футболиста и чеканить (набивать) мяч. Цель игры — начеканить как можно больше. Считаются отскоки от ступни, колена и головы. При этом обязательным фактором была монетизация. Хоть какая-нибудь! Тут дело даже не в заработке — нужно познакомиться с инструментами.

Сделаем за неделю

Цель мы сформулировали достаточно чётко. Пора приступать! Мы забили на пары и ушли в отпуска с работы на неделю. За это время мы планировали сделать меню, сцену с игрой, подсчёт очков и рекламу. Думаете, получилось?

Получилось! Мы реально успели сделать игру без дизайна и звуков за неделю. На инструментах, которыми раньше никогда не пользовались (Swift + SpriteKit). Получилось нечто даже более-менее играбельное, правда, с заглушками вместо нормальных текстур.

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

Или за месяц

Так, стоп! Художник? Мы что, крупная корпорация? Нет, но программисты обычно рисуют не очень. Поэтому было решено отдать это дело на аутсорс. Тем более что наша неделя на игру подошла к концу.

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

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

Ну или за полгода

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

Новые текстуры были большего разрешения и при замене в редакторе сцены Xcode постоянно вылетал! Библиотеки у Apple, конечно, отличные, но IDE, мягко говоря, могла быть и постабильнее! Приходилось удалять десятую версию Xcode и ставить девятую, чтобы хоть как-то работать с текстурами.

Кстати, на каком-то этапе обнаружился интересный баг с коленом, который мы назвали «Режим кузнечика» :)

Keepie Uppie — режим кузнечика

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

Финишная прямая

Вот у нас готова игра. Что нужно для завершения проекта? Загрузить в App Store. Всего-то. Для этого нужны: аккаунт разработчика, политика конфиденциальности, иконки и скриншоты всех размеров, а также описания на языках всех стран, где вы хотите размещаться.

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

Принятие решения об отправке в магазин

Проверка занимает двое суток. У нас отклонили один раз из-за каких-то законов Китая. Мы просто не стали там релизиться, и через двое суток наступил этот долгожданный момент! Игра в магазине! Мы шли к этому полгода! Мы довели проект до конца!

Таки шо по деньгам?

Схема монетизации в нашей игре была выбрана следующая. В момент, когда игрок теряет мяч, он может посмотреть рекламу и продолжить чеканить, не потеряв очки. Так можно сделать только один раз. В техническом плане мы использовали Google Rewarded Video Ads.

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

Статистика по установкам приложения

По затратам проект вышел примерно в 150 человеко-часов, 2500 рублей оплата художнику и $100 за аккаунт разработчика. Окупилось? Давайте посмотрим в дашборд Google-рекламы.

Да, за всё время мы заработали $5,41 — около 360 рублей. При затратах в 9000 рублей. Итого доходность мероприятия: -96%. Да, заголовок немножко кликбейтный, простите :)

Что в итоге?

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

А что по поводу того, что заработали мы всего $5? Я вам скажу:

Зато не на дядю!

P. S. Обязательно доделывайте дела. Если не получается — упрощайте, но доделывайте. Это очень полезное умение.

Удачи в ваших проектах!

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Сергей Крупник", "author_type": "self", "tags": [], "comments": 58, "likes": 79, "favorites": 85, "is_advertisement": false, "subsite_label": "tribuna", "id": 81857, "is_wide": false, "is_ugc": true, "date": "Thu, 05 Sep 2019 00:50:42 +0300", "is_special": false }
0
{ "id": 81857, "author_id": 163868, "diff_limit": 1000, "urls": {"diff":"\/comments\/81857\/get","add":"\/comments\/81857\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/81857"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116, "last_count_and_date": null }
58 комментариев
Популярные
По порядку
Написать комментарий...
38

В ложились бы в маркетинг и заработали ещё $5 сверху.

Ответить
7

Имеется в виду еще 9000 рублей в маркетинг чтоб получить еще 5 уе

Ответить
1

Не, там бы выхлоп был уже 10 уе

Ответить
1

В следующий раз обязательно так и поступим!)

Ответить
0

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

Ответить
0

Добрый день! Можете написать на почту sk@nightone.tech

Ответить
29

Мне кажется что-то идёт не так 🙂. Так после каждого рестарта.

Ответить
2

Проиграл.

Ответить
1

Это симулятор хирурга.

Ответить
0

О, можете, пожалуйста написать версию iOS. Мы тестировали на большинстве - все было нормально. Такое встретилось только на 13 beta 1 после релиза.

Ответить
0

Последняя публичная бета iOS13

Ответить
25

Обязательно доделывайте дела.

Нет времени, надо все статьи на vc прочитать сначала.

Ответить
18

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

Ответить
5

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

Ответить
0

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

Ответить
4

простите

Нет

Ответить
0

А что с пальцами у героя?

Ответить
9

Провокационный элемент, нацеленный на обсуждение в комментариях)

Ответить
2

Почитайте про hyper-casual, издатели уровня Voodoo рекомендуют не затрачивать на разработку больше 1 недели, и смотрят:
• На цену установки Facebook или Google Ads на iOS в США
• Ретеншен 1-7 (если упрощенно)
• Тестирование через рекламу ~50 гипотез перед выпуском игры

В общем, в этом бизнесе без вложений в рекламу не заработать, если есть приложение с ретеншеном d1 40-60% и ценой инсталла iOS США $0,20-0,30 — идите к издателям, можно будет заработать 😉

Ответить
1

"Разработка игры за 1 неделю" от создателей книги "выучи английский за ночь"

Ответить
0

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

Ответить
0

Небольшой момент: Voodoo получили $200М инвестиций, их игры в топе всех сторов и они знают как на таких простых играх зарабатывать десятки миллионов долларов

Ответить
0

Знаем, знаем..
Весь аппстор и гуглплей в этих говноиграх одноразовых.

Ответить
0

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

Ответить
0

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

Ответить
1

Я вам цитирую принцип от лидирующего hyper-casual издательства. Они рекомендуют протестировать 50 механик, сделать за месяц 4 игры с лучшими механиками, проверить доходность каждой, а не делать одну игру с 1 механикой.

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

Как сделать игру за пару часов? Использовать готовое (единое) решение меню, показ рекламы, уровни и прочее, использовать готовые единожды купленные модели и графику и менять только игровую механику.

Посмотрите на ютубе видео как за 4 часа делается механика и уровень helix jump (самая скачиваемая игра 2018 года).

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

За одну неделю не сложно сделать игру, которая принесёт $10к-100к, вопрос в количестве итераций и в правильности анализа.

https://youtu.be/fP8LSNArapg

Ответить
–1

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

За одну неделю не сложно сделать игру, которая принесёт $10к-100к, вопрос в количестве итераций и в правильности анализа.

Возможно, но сколько вы потратите до этого, на тестирования всех гипотез и трафик? Это доступно далеко не каждому, поэтому не так уж это и легко.

Ответить
3

Ущербный, как и большинство современных фильмов, книг и прочего.

Это вкусовщина. Не нравится — не качайте.
Люди зарабатывают на этих играх деньги. А миллионы людей в них играют.
Money talks.

Ответить
0

Обязательно попробуем публикацию через издателей! Спасибо за совет)

Ответить
1

Крутяк! 🚀

Ответить
0

Спасибо!

Ответить
1

Зато теперь в резюме можно гордо писать "Есть приложение в AppStore"

Ответить
0

Это точно)

Ответить
0

Молодцы! И за честность (про заработок) отдельный респект!

Ответить
1

Спасибо!
На самом деле, какое-то время игра была в магазине с тестовым ключом Гугл рекламы. Не заметили при сборке релиза. Потом выпустили обновление. Думаю, из-за этого мы потеряли процентов 10 заработка)
В статью эту историю включать не стал, чтобы еще сильнее не раздувать

Ответить
0

Проект начинается в момент запуска в App Store - монетизация и раскрутка... ух)
ASO, маркетинг, статьи, review, борьба с отзывами единицами :D
Вы молодцы пилите еще)

Ответить
0

Да, это все было в планах) В следующий раз пойдём дальше!

Ответить
0

почему категория будущее, а не трибуна?

Ответить
0

Промахнулся по неопытности. Буду внимательнее)

Ответить
0

попробуй отредактировать, хотя может еще модератор изменит)

Ответить
0

Не, не получается изменить категорию

Ответить
0

Молодцы :)

Ответить
0

Спасибо!

Ответить
0

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

Ответить
0

Спасибо) Согласен

Ответить
0

Чисто гугловая реклама - мало заработаешь. Попробуйте прикрутить SDK какого нить медиатора, вроде Appodeal, там в разы с рекламы больше приходит. Был опыт использования только гугла и медиатора. С медиатором получше получалось!

Ответить
0

Спасибо за совет! Попробуем работу с другими площадками в следующем приложении

Ответить
0

А почему unity не использовали?

Ответить
0

А сколько стоят 150 человеко-часов таких разработчиков? ))

Ответить
0

Желаете приобрести?)

Ответить
0

желаю обсудить )

Ответить
0

Проблемы 3 на мой взгляд:
1) не использовали медиатора, к примеру Appodeal/IroneSource, что может на 2 порядка поднять прибыль
2) не использовали межплатформенные средства разработки, к примеру Unity
3) нет желания на этом зарабатывать, отсюда и нет медиатора и Swift и отсутствие инапов и отсутствие рекламной компании с оценкой прибыльности установки

Ответить
–1

Срочно идите к инвесторам! Потенциал огромный!

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ] { "page_type": "default" }