Добрый день, уважаемая редакция любимого ЦП.
Меня зовут Максим, мне 21 год.
Я хотел бы поделиться с читателями опытом создания игры для iOS и Android с полнейшего нуля — без каких-либо знаний программирования и с гуманитарным образованием. Рассказать о том, что мне пришлось пройти, с какими проблемами столкнуться, и как я их решал.
Начнем с того, что по образованию я юрист, работающий ведущим проект-менеджером по маркетингу в крупнейшем банке страны.
Учитывая, что у меня абсолютно гуманитарное образование (даже юридический лицей заканчивал), а математику я после восьмого класса вообще не помню, мне даже в голову не могла прийти идея о том, что я когда-либо буду заниматься программированием, а тем более, написанием игры, и, уж более того, написанием статьи о том, как я писал игру.
Надеюсь, моя история будет полезна всем, у кого есть много идей, но для реализации недостаточно знаний, веры в себя или пинка под зад.
Let's begin.
Зарождение идеи
Так сложилось, что по жизни я не люблю сидеть без дела и всегда пытаюсь учиться и узнавать что-то новое. Наверное, поэтому меня, юриста, и занесло в банк маркетологом.
Как-то вечером я дочитывал очередную интересную статью о маркетинге на ЦП и решил глянуть, что же мне предлагают почитать еще. Пролистывая страницу вверх, я увидел в сайдбаре вот эту
статью.
Я прочитал материал и обмозговал информацию. Тема мобильных игр показалась мне очень забавной и перспективной. Я прочитал еще парочку статей о геймдеве и принял решение, что надо бы примерить на себя роль разработчика игр.
Решение было спонтанным и я понимал, что шансы написать хорошую игру у человека с гуманитарным образованием и без малейшего представления о программировании близки к нулю. Но даже такой расклад меня устраивал, потому что это хороший способ расшевелить мозги, да и знать программирование никогда не помешает. А еще я люблю ставить себе нереальные цели и выполнять их.
Для начала я поставил себе дедлайн: выпустить игру на любой (iOS или Android) из платформ до 1 января 2015 года. Я не знал, как я это сделаю. И этот факт лишь повышал градус энтузиазма.
Итак, когда я понял, что хочу делать игру, передо мной стал очевидный вопрос: «А на какую же игру у меня всё-таки хватит мозгов для начала?». Здесь было бы уместно рассказать об исследовании рынка, выявлении трендов и прочей ерунде. Но, к счастью, идея ко мне пришла сразу.
Я думаю, многие из вас играли в Counter Strike или хотя бы слышали о таком. В те добрые времена, лет семь назад, ходил миф (а может это была и правда) о том, что вот
эта игра помогает развивать реакцию для игры в CS. А еще, если верить легенде, подобный тест проходят американские военные пилоты и они могут продержаться вживых более двух минут (мой рекорд, к слову, был около 25 секунд).
Тогда каждый уважающий себя игрок CS был обязан поиграть в эту штуковину. И, как позже выяснилось, люди в нее могли «залипать» по несколько часов, а в особенно тяжелых случаях — сутками. Да и сам я, помнится, в общей сложности убил пару тройку часов на эту ерунду.
Как вы уже догадались, я решил сделать что-то похожее для iOS или Android. Просто потому, что в ней прикольно убивать время, а
Flappy Bird меня ну никак не впечатляла, как и творения от Ketchapp.
В поисках себя
Следующим вопросом после выбора игры, стал: «А как же всё-таки сделать игру?». Любой адекватный человек сначала хотя бы поинтересовался, какие есть способы создания игр, на каких языках и с помощью каких инструментов они написаны, как сделать игру кроссплатформенной и так далее.
Но это ведь адекватный человек так поступил бы, а речь идет обо мне. Я вспомнил, что недавно смотрел Keynote, где Apple
представила новый язык программирования — Swift. Мужик, который презентовал Swift, прямо на презентации написал игру с дирижаблем. Я вспомнил этот момент и мне показалось, что Swift сможет выучить даже ребенок.
Первым делом я зашел на сайт Apple и скачал книгу
The Swift Programming Language. Прочитав пару страниц, у меня возникли два вопроса:
- Неужели этот мужик из презентации настолько умен, что смог за несколько минут на сцене написать подобие игры?
- Неужели я такой тупой, что не могу понять элементарных вещей?
Второй вариант казался более правдоподобным, и я понял, что так дело дальше не пойдет. И начал искать бесплатные курсы программирования.
Каким-то чудом я попал в
iTunes U на курсы Programming Methodology (Stanford) c веселым профессором-индусом Мераном Сахами (Mehran Sahami). Курс был посвящен языку Java. Я решил, что это будет неплохим началом. Я знал о том, что Android написан на Java.
К слову, курс бесплатный и очень классный. Харизматичный профессор в доступной и веселой форме рассказывает о принципах и методах программирования, показывает примеры и веселит аудиторию.
Я честно смотрел уроки и выполнял домашние задания с
Karel the Robot и другие веселые штуки, что помогло мне разобраться в основах. Спустя две недели я подумал, что уже стал разработчиком 99 уровня, и начал искать уроки, как написать игру на Android. Забегая наперед скажу, что я собираюсь все-таки досмотреть курс, когда доведу игру до ума.
Проведя в поисках около получаса, я нашел несколько уроков (уже не помню, как они назывались, но их море в интернете). И следующие несколько дней я провел за изучением и практикой написания игры под Android. Уроки становились все сложнее и скучнее. На пятый день мне стало совсем скучно и сложно. Тогда-то я и решил найти более интересные и легкие пути написания игр.
Знакомство с Unity 3D или как спать по три-пять часов и оставаться в здравом рассудке
Погуглив еще некоторое время, я очутился на сайте игрового движка
Unity 3D. Мне понравилось описание и, недолго думая, я скачал его. Когда я впервые открыл Unity, то почувствовал пилотом Boeing 747: кол-во различных элементов интерфейса ввело меня в когнитивный диссонанс (прям как первое знакомство с Photoshop). К тому моменту я уже рассказал многим, что хочу научиться программировать и написать свою игру (я люблю так делать, чтобы не было шанса отступить от цели). Пути назад нет. Так я начал изучение Unity.
После недели, проведенной за разными уроками по Unity, я понял, что еще не все потеряно. Дело было к концу августа и сроки уже поджимали. Так как у меня маленький ребенок, который сразу же нападает и начинает крушить ноут, если я его включаю, то до 21:00-22:00 (пока ребенок не ляжет спать) я не мог заниматься игрой. А еще я решил усложнить себе жизнь и поставил условие: пока не выпущу игру, не ложиться спать раньше 02:00.
На работу я вставал в ближе к семи, поэтому мне показалось, что четырех-пяти часов на сон должно вполне хватить. Хотя и до этого я частенько засиживался, но обычно старался до 2:00 уже спать.
И вот я принялся рисовать дизайн. Учитывая, что я не дизайнер (хоть и знаю что-то в Photoshop), первые прототипы были очень ущербными.
Когда я показал первые макеты коллегам на работе и жене, на меня смотрели с сожалением и не знали, как ответить, чтобы не обидеть. Но это мелочи, потому что я привык жить по принципу «большинство всегда ошибается» и продолжал верить, что все правильно делаю.
Я, конечно, понимал, что мой дизайн был далек от идеала, но на тот момент он мне казался «ниче таким». Забегая наперед, скажу, что дизайн я переделывал раз пять. Меня вдохновила игра Dots. Мне нравится их простой и красивый стиль.
В перерывах между редизайном я программировал игру. Так как материалов по Unity 3D довольно много, особого труда с написанием кода я не испытывал. Ответы на все вопросы у меня получалось нагуглить в течение 5-45 минут. Но, стоит заметить, что вначале, даже при наличии готовых решений, разбираться в примитивном (для нормальных разработчиков) коде приходилось по несколько часов. Я не просто копипастил решение, а пытался разобраться и написать по-своему. Естественно, поначалу это не всегда удавалось.
Первые проблемы с Unity
Начал писать игру я сразу на двух языках: JavaScript (UnityScript) и C#. Связано это с тем, что решения на форумах я находил то на JavaScript, то на C#. Когда я закончил писать прототип игры, а это случилось примерно недели через две, меня начало смущать примерно одинаковое количество скриптов JavaScript и C#.
Снова погуглив, я понял, что так быть не должно. И я принялся переписывать все на JavaScript (он показался мне проще, чем C#). Потратив один день на «перепись», я начал замечать, что большинство примеров-то в интернете именно на C#. И взялся переписывать все обратно.
Совет: Чтобы сэкономить свое время, изучайте все тонкости движка заранее, а не делайте все поспешно и бездумно, как я.
Первый прототип игры был очень ущербным с точки зрения дизайна, но мне главное было посмотреть на геймплей. И он, честно говоря, он был таким же, как и дизайн. После этого я временно забил на геймплей и сконцентрировался на меню и «фишках», которые должны отличать мою игру от других: уменьшение шарика, замедление врагов и спасение от врагов.
Сделать их было несложно, а вот багов, связанных с ними, в самом конце оказалось больше всего.
Закончив с «фишками», я прикрутил API для совершения покупок и leaderboard.
Mission completed!
На дворе был только ноябрь, и мне казалось, что игра готова к выпуску, а я справился с задачей раньше времени. Изначально я хотел выпустить свою игру через издателя, поэтому наделал скриншотов и написал в Ketchapp письмо с заголовком «Amazing $1 000 000 game is looking for a publisher», в котором я очень уверенно рассказывал, что моя игра просто взорвет App Store и принесет издателю десятки миллионов долларов.
Конечно же, издатель не смог пройти мимо такого заголовка и через два дня я получил письмо с просьбой расшарить на них игру в TestFlight. TestFlight — это такая штука, с помощью которой можно предоставить доступ к игре внешним пользователям (тестировщикам). Спустя три дня у них уже была на тесте моя игра. После чего писем от Ketchapp я больше не получал.
Логический вывод: игра — г***о
Подобного развития событий я никак не ожидал, поэтому несколько расстроился и решил сделать небольшую паузу, чтобы переосмыслить концепцию игры, дизайн и геймплей.
В этот момент я как раз немного приболел, поэтому пауза затянулась аж на неделю. После недельного перерыва я принялся за очередной полный редизайн, изменил управление, добавил еще один режим — собирание звезд — и пофиксил баги, которых оказалось еще довольно много. На все это добро у меня ушел еще месяц.
4 декабря Apple сообщили, что дедлайн для запуска приложения в App Store — 18 декабря.
18 декабря, четыре утра, уже через три часа мне нужно вставать на работу, а я всё еще делаю скриншоты для App Storе. С горем пополам к пяти часам утра я залил игру и лег спать до семи.
Процесс Review в App Store, как я узнал из разных форумов, обычно занимает пять-десять дней. Поэтому мне казалось, что я всё успеваю до 1 января. Но придя вечером с работы, я обнаружил, что забыл включить покупки в приложении, которые отключил при последнем тестировании.
Естественно, приложение пришлось перезагружать и выставлять снова. Даже несмотря на то, что по американскому времени я вроде уложился в срок, моя игра не прошла Review в 2014 году.
Первая статистика и разочарование
К сожалению или к счастью, мое приложение опубликовали аж шестого января. За три недели ожидания публикации в App Store я успел исправить ряд багов и начал делать Android-версию игры.
Обрадовавшись, что моя игра наконец выставлена, я принялся рассылать всем друзьям во «ВКонтакте» приглашение скачать игру и дать фидбек. Но вскоре я обнаружил, что у меня не работают встроенные покупки. Этот факт меня не очень обрадовал и я решил еще раз протестировать сборку игры, которую залил. При тесте покупки работали, значит, проблема была не в игре. Я решил зайти посмотреть что же творится у меня в iTunes Connect (личный кабинет разработчика Apple). И это было правильным решением.
Оказалось, что я просто забыл опубликовать покупки. Этот момент я быстро исправил и стал ждать у моря погоды.
В первый день было семь установок игры, на второй — 65, а на третий — 16. «Че за ****** (жесть)?», — подумал я, но надежда все еще оставалась. Увы, дальше было только хуже: с каждым днем количество инсталлов все падало и падало, и через две недели вообще дошло до нуля.
И здесь я понял, что я что-то делаю неправильно. Прочитав еще несколько статей о маркетинге в App Store, я понял, что моя проблема была в неправильно выбранных ключевых словах. Я выбрал абсолютно все наиболее популярные ключи, по которым находит более трех тысяч игр. Естественно, мою игру по таким запросам никто не найдет. Даже если очень сильно захотят.
Далее я решил проанализировать, какие ключевые слова используют другие игры, и по каким словам находят игры, похожие на мою.
Кстати, когда мне пришла идея запустить игру, я был настолько уверен, что ничего подобного еще не выпущено, что даже не удосужился прошерстить App Store на наличие аналогичных игр. Естественно, когда я уже опубликовал игру, я начал искать клонов, и с радостным сожалением обнаружил, что такие игры есть. И их много. Почему «радостным сожалением»? Потому что я наткнулся на игру Red Bit Escape, качество которой даже нельзя назвать плохим. Она ужасна. Но при всей её ужасности, в leaderboard было 1 700 000 пользователей на момент написания статьи.
Естественно, я обрадовался, что есть спрос на подобные игры, а дизайн и управление у меня явно выигрывают. Поэтому я принялся дальше дорабатывать игру и в текущей версии добавил обучение в начале игры, управление помощниками с помощью свайпов и исправил все баги, которые удалось найти при более углубленном тестировании, поменял ключевые слова и запустил игру снова.
Кстати, параллельно с обновлением игры на iOS, я выставил игру и на Android.
Попытка №2
29 числа вышел первый апдейт приложения, после которого я думал, что заработаю хоть 10$. Но не тут-то было. Утром 30 января я получил «письмо счастья» от Google. Мне забанили аккаунт AdWords на месяц, а выручку «раздали крестьянам» (вернули рекламодателям) за то, что у меня был слишком высокий CTR (соотношение показов и кликов по рекламному объявлению), который невозможно достичь легальными путями.
Это было связано с тем, что друг, который вызвался побыть тестировщиком игры, сообщил о баге при клике на рекламу — игра просто закрывалась. Я принялся играть в свою же игру и кликать на каждую появившуюся рекламу, чтобы найти и исправить баг.
Я был уверен, что все мои действия абсолютно законны, так как я сидел с тестового аккаунта. Увы, я ошибся. Теперь уже месяц игра висит в App Store без рекламы, люди наслаждаются ad-free-геймплеем, а мои $3, которые на тот момент я честно заработал с рекламы, улетели в трубу.
Вывод: всегда читайте условия и правила предоставления услуг. Иначе можете попасть на деньги. Хорошо, что у меня была незначительная сумма.
Так что же случилось со скачиваниями? После апдейта, как видно на графике ниже, показатели значительно выросли, но не надолго. Скачивания шли, пока игры, к которым я привязался в ключевых словах (Looney Tunes Dash, WWE Immortals и прочие), были еще на слуху. Как только они пропали из топа — пропали и скачивания.
Вывод: я снова что-то сделал неправильно.
Попытка №3
Пока пользователи наслаждаются игрой без рекламы, я решил быстренько найти новую рекламную площадку, добавить в игру два режима (Chaos и Multiplayer) и еще несколько прикольных фич.
Найти новую площадку для рекламы проблемы не составило. После короткого изучения всех за и против разных площадок выбор пал на Chartboost. А для мультиплеера я выбрал сервис Nextpeer.
Если с рекламой все было предельно просто: скачал, поставил, запустил, то с мультиплеером история затянулась аж на полторы недели.
На Android после некоторых «танцев с бубном» мультиплеер все-таки заработал, а вот что касается iOS, все было не так радужно. По какой-то причине плагин не хотел запускаться. Я начал долбить службу поддержки, так как мой релиз задерживали только неполадки геймплея.
В итоге через два дня мне ответил сооснователь Nextpeer Итамар. Он быстро вник в суть проблемы и скинул мне какой-то патч для Xcode, после чего игра должна была завестись. И действительно, ошибки в Unity пропали, но мультиплеер так и не начал работать правильно. Спустя еще несколько дней разбирательств, Итамар предложил мне поставить бета-версию обновленного сервиса, с чем я согласился. И не зря — мультиплеер заработал, а интерфейс стал намного красивее.
В завершение
С горем пополам я пофиксил еще некоторые баги, сделал видео-превью и отправил игру на review в App Store. Попутно решил снова попробовать написать в Ketchapp и Chillingo о публикации моей игры. Если в Ketchapp мое повторное письмо проигнорировали, то ответ от Chillingo я получил через два дня. Директор по продажам Бучанан Леви (Buchanan Levi) сообщил мне, что они, к сожалению, не публикуют уже выпущенные игры, но я могу всегда обратиться к нему с будущими проектами.
Сколько я заработал?
Ничего. А точнее — $3, которые AdMob списал обратно рекламодателям. Финансовые результаты — плачевные, но зато опыта набрался. Если кому-то будет интересно, как развиваются события у новоиспеченного инди-разработчика — с радостью отпишусь в комментах или напишу еще одну статью, в которой отвечу на все вопросы и поделюсь еще своим скромным опытом и взглядом на геймдев со стороны чайника.
В планах — нормальная аналитика и новая игра.
Итак, выводы:
- Никогда не бойтесь начинать и изучать что-то новое. Это всегда полезно.
- Перед тем, как начинать свой проект, будь то игра или благотворительная организация, всегда имейте план действий и придерживайтесь его. Иначе вы рискуете сорвать все сроки и сбиться с пути.
- Ставьте себе нереальные цели и расскажите о них как можно большему количеству друзей и знакомых, чтобы у вас не было шанса отступить. Психология последовательности дальше сделает свое дело.
- Будьте готовы к тому, что для завершения проекта вам придется проявить настойчивость и принципиальность. У вас, скорее всего, будут моменты, когда вы перегорите и захотите забить. Не давайте эмоциям взять верх. Всегда следуйте своему плану.
- Смиритесь с тем, что всегда будут люди, которые будут отговаривать и демотивировать вас. Говорить, что вы занимаетесь не тем и у вас ничего не выйдет. Просто забейте на таких людей. Всегда легче критиковать, чем сделать что-то самим. Большинство всегда неправы. Имейте мужество сказать «нет» всем вокруг и продолжать идти к своей цели.
- В моменты, когда вы устали и уже не можете заниматься проектом, — сделайте небольшую паузу. Осмотритесь вокруг, займитесь другим делом и подумайте. Именно в такие моменты вы сможете увидеть свой проект и его недостатки со стороны, а так же свериться с планом и подкорректировать его.
- Никогда не сдавайтесь. Помните, что у вас есть цель которую нужно достичь любой ценой. А средства сами собой найдутся.
Чтобы написать колонку для ЦП, ознакомьтесь с требованиями к публикуемым материалам.
"Когда я показал первые макеты коллегам на работе" помню этот момент:) - я тогда подумал: "Черт возьми, когда он находит время на это все":)