История создания второй игры на Unity (или как я нашел силы после первого провала)



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

    Получилась довольно обширная статья, но я старался разбавлять сие дело картинками!

    Маленькая предыстория


    Я являюсь инди разработчиком на Unity на протяжении почти 3-х лет (где-то с начала 2015 года). По началу, в свободное от работы время, занимался изучением моделирования в Blender, учил основы программирования (в основном C#, т.к. именно он нужен для работы в Unity) и кое-как осваивал сам движок, просматривая тонны видео роликов, статей и различной документации. Так, за полтора года я смог выпустить свою первую игру на Android. Было очень сложно, т.к. компоновать работу и такое затратное по времени хобби достаточно трудно.

    К сожалению, первый блин конечно же был комом (ну как так?). Первая игра принесла мне в копилку немного больше 200$ (хотя чуть позднее удалось её продать для создания ремейка, получилось достаточно неплохо). По окончанию, сил на новый проект практически не было, поэтому после релиза и месячных конвульсий, в надежде реабилитировать проект, решил взять себе отпуск (от хобби, увы, работа тестировщиком не позволяла раскинуть булки на диване). Так, долго обдумывая результаты своей полутора годовалой работы, немного отдохнув, начал я разработку уже новой игры. Ну правда, чего ждать, раз уж начал, нужно продолжать!


    Ну вот как-то так вышло в итоге

    С чего начать?! С идеи!


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

    1) Сюжет. Даже если у вас тетрис, маломальская предистория знатно улучшит впечатления об игре! Начните подготавливать игрока сразу с описания игры в магазине. Складывать тетрис конечно интересно, но если от этого зависит будущее человечества, то игра уже начинает сверкать иными красками!

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

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

    Тут вам помогут социальные сети. В том же Instagram либо Twitter подпишитесь на игровые аккаунты или аккаунты интересных разработчиков. Их посты помогут обрести вдохновение и в любом случае что-то полезное найдете!

    3) Графическая составляющая. Будучи инди разработчиком, позволить себе трипл эй проект ну физически нереально. Нужно заранее обдумать визуальную составляющую. Мой выбор пал на Low Poly стилистику.

    Весомым плюсом данного подхода является низкий порог вхождения. Вам не нужно уметь вырисовывать сложнейшие 3д-модели, т.к. построение всей геометрии основывается на примитивах. К примеру вот такие камушки можно сделать за несколько минут:



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



    Как видите, не всегда Low Poly графика может быть красивой.

    4) Вовлеченность игрока. Просто сделать игру конечно можно, но лучше, чтобы в неё ещё и играли. Тут нужно продумать, какими способами будем удерживать игроков. Наиболее важный фактор — количество игрового времени, необходимое для прохождения всей игры. К сожалению, один ты физически не в силах создать, к примеру, 300 уровней. Но как выход из ситуации, можно предлагать игроку перепроходить их.

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

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

    5) Какие платформы будем поддерживать. Свою первую игру я выпускал только на Android. Оно и понятно, заплатил 25$ за аккаунт разработчика и живи спокойно.

    С Apple все обстоит куда сложнее. Тут тебе ежегодный платеж в размере 99$ (если через год не продлишь, все твои игры пропадут с App Store, пока не подкинешь в казну), тут тебе в добавок придется закупить любое устройство на OS X (да-да, на Windows ты не сможешь выпустить приложение под iOS). Так же помимо мака, придется ещё и девайсом обзавестись. На этот случай мне повезло, есть родственники и друзья, которые помогли в решении данной проблемы. Но лучше конечно взять какой-нибудь старенький iPhone 5s (б.у.), чтобы не доставать людей просьбами попользоваться телефоном.

    Итого, со всем этим великолепием (а сумма уже не маленькая накопилась), начинается знакомство с «прелестями» iOS. Бонусы начинаются с самой Unity. На iOS не получится сбилдить проект в один клик. Придется устанавливать Xcode, билдить проект для Xcode, из него уже делать сборку на телефон. Причем не получится взять любой iPhone и проверить на нем. Нужно будет сделать Provisioning Profile в apple developer, добавить в этот Profile девайсы (заполнив соответствующие UUID) и только тогда у вас появится возможность залить билд на устройство.

    Вроде не сложно, но все познается в сравнении. Так что, если решили собраться силами и попробовать охватить не только Android, но и iOS (а оно того стоит, говорят там в 4 раза больше прибыль по сравнению с Android, глядишь, вместо 1$, целых 4$ заработаешь <тут был плачущий смайлик>), то будьте готовы, что с Apple придется изрядно повозиться.


    Ещё чуток картинок, нудно же сплошной текст читать

    6) Монетизация и её интеграция с игрой. Довольно больной момент. Я конечно не как EA, игру не буду продавать за 60$ (да кто её купит) с внутриигровыми покупками на 80$, но в любом случае вопрос нужно заранее прорабатывать.

    В первой игре я использовал связку бесплатная урезанная + полная платная версии игры. В этот раз я решил использовать: бесплатная + реклама (Unity Ads) + внутриигровые покупки. Да, меня, как игрока, самого не устраивает реклама, особенно, когда ты не успел нажать СТАРТ, а уже 3 ролика видео рекламы просмотрел. Тут я решил быть осторожным. Сделал два индекса (5 побед и 10 поражений). Как только один из этих критериев превышается, то при заходе в меню будет высвечиваться сообщение, что мол, друг, нет энергии, нужно либо рекламу посмотреть, либо пропустить её. После просмотра рекламы (или пропуска за монеты) эти два индекса сбрасываются в ноль и все начинает считаться по новой.

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

    Конечно же, любая покупка отключает рекламу, к слову о покупках. Как-то бегая по Play Маркету, я наткнулся на одну интересную игру, в которой игроку на определенном уровне предлагают купить доступ к следующим главам следующим образом:
    Друг! Не бойся! Выбирай любую цену, я все стерплю (и ниже возможные варианты цен)

    — бесплатно
    — цена маленькая
    — цена средняя
    — цена чуть больше средней
    — очень высокая цена, разраб, ты абалдел?

    По сути, игрок мог либо бесплатно продолжить играть (будет сопровождать реклама), либо же купить за любую удобную цену. Данная идея мне очень понравилась, решил подобную вещь реализовать в своем проекте.

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


    Разбавим писанину ещё одним скриншотом из игры

    7) Локализация. Обычно новички делают игру на двух языках — English и Russian (увы, я пока новичок). Чуть выше идет джентльменский набор EFIGS (English, French, Italian, German and Spanish). По сути это отличный вариант для старта, но увы, в 150-200$ (зависит от кол-ва слов) на перевод придется раскошелится, хотя чуть позже, как немного разгребусь с продвижением, попробую что-нибудь поискать на фрилансе. Возможно получится найти более менее приемлемый вариант по цене.

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

    8) Взаимодействие с сервисами (будь то Play Games для Android или GameCenter для iOS). Тут заранее нужно решить, будите ли вы поддерживать лидерборды, ачивки или нет. По реализации на обоих платформах все достаточно просто.

    С iOS например и вовсе можно воспользоваться классом GameCenterPlatform и Social из коробки. Все что нужно там есть.

    С Android тоже все хорошо. Нужно скачать официальный плагин от Google на GitHub и собственно на странице GitHub-а пробежаться по гайду настройки.

    Тут чем мне понравился гугл, так это возможностью сохранения игрового процесса в облако. Увы, Apple такой возможности не дает (на бесплатной основе), а т.к. изучать написание плагинов под iOS нет времени, а пользоваться её плюшками хочется, пришлось приобрести iCloud KeyChain плагин, с помощью которого можно очень удобно сохранять весь прогресс в облако.

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

    9) Изучение рынка мобильных игр по схожей категории. Я уже приводил пример выше, когда другие игры помогают найти интересные идеи и механики. Балуйте себя небольшими перерывами в ползании по Google Play (или App Store). Можно прямо по топам бегать и наматывать на ус, почему они там (то чувство, когда у тебя нет 15,000-30,000$ на продвижение своей игры). В любом случае, это позволит немного отвлечься от разработки, посмотреть так сказать на мир, снять с себя розовую пелену великолепия и увидеть скрытые глазу недостатки.


    Да, друг, тоже заметил, что давно не было картинок

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

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

    Как вы уже поняли, первый проект я сражался своими силами :D. Мне понравилось, буду пробовать ещё.

    Данную тему я раскрою в следующем посту где-то через месяц-полтора, когда будут видны результаты продвижения игры. Не хочется быть голословным, хочется подкрепить свои слова графиками, поэтому извиняйте, самое интересное остается на потом :). В двадцати двух словах — буду использовать соц. сети (таргетированная реклама вконтакте, Facebook, Twitter, Instagram), Google AdWords, обзоры на Youtube, статья на 4pda и конечно же многочисленная писанина на форумах и прочих ресурсах.

    Не спешите релизиться!


    Перед релизом обязательно нужно опробовать игру на своих друзьях. Лучше и вовсе это делать во время разработки. Данный процесс позволит найти проблемы со сложностью игры, юзабилити (порой некоторые, очевидные для нас вещи, будут абсолютно не понятны для игроков). Увы, после тестирования пришлось значительно облегчать все уровни. Это съело достаточно много времени, поэтому нужно давать играть как можно раньше (адекватный билд конечно же, сухую поделку с кнопкой «Старт» лучше не высовывать).

    Так же, ближе к релизу, настоятельно рекомендую опробовать открытое бета-тестирование в Google Play. Хороший человек посоветовал сделать открытый бета-тест и попробовать постучаться в Early Access (категория на Google Play) через отправку данной формы.

    Здесь освечу только поле Open beta launch date. В нем необходимо указать желаемую дату попадания в Early Access. Желательно указывать дату где-то +неделя вперед (лучше — больше), чтобы у Google было достаточно времени изучить вашу игру и сделать вывод, отправлять ваше творение в Early Access или нет. В случае успеха, вам пришлют письмо в дату, указанную в Open beta launch date. Мне к сожалению ничего не прислали. Ну а так, если прорветесь, можно будет получить много органического трафика (иногда и до 50к удается добраться).

    Итого, 6 октября я сделал открытый бета-тест игры. За это время без каких-либо вложений получилось набрать чуть больше 1400 тестировщиков. Да, это капля в море, но в любом случае на момент старта у меня хотя бы не будет меньше 5 установок (возможно это подвинет мою позицию с 126 223 места на 124 873 в топе новых приложений, <тут нужно было опять вставить плачущий смайлик>).


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

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

    Из недостатков — многие ресурсы посчитают открытый бета-тест за официальный релиз. Как результат, бета-версия попадет на сайты, что возможно не совсем желаемый результат, тут как говорится, не без ложки дегтя. Так же достаточно грустно реализована обратная связь. Было много отзывов, на каждый отвечал чуть ли не через 5-10 минут, но к сожалению только два человека откликнулись через почту. Поэтому, если есть возможность, лучше интегрировать обратную связь прямо в приложении.

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

    Из минусов — даже в TestFlight нужно ожидать проверки приложения со стороны Apple. Хотя оно и не столь большое, 4-6 часов обычно занимала проверка в TestFlight (к слову, мой релизный билд проверялся 22 часа, достаточно быстро, это не 2 недели, как было раньше).

    Итого


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

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

    Спасибо, что осилили столь обширный текст, до новых встреч :)
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 19
    • 0
      Вы говорили — Objective-C, есть возможность на Swift писать?
      • 0
        Думаю в этом случае Objective-C придется использовать как мост и от него уже стучаться к Swift. Хотя, есть плагин, с помощью которого можно и на swift писать. Поправлю в статье, чтобы не сбивало с толку. Спасибо!
      • +1
        А вы под IOS Xamarin не пробовали?
        • +1
          Хм, идея, ведь все тот же C#. Вообще нет, не пробовал, даже как-то не думал об этом…
          • 0
            Я просто вот недавно пощупал Андроид благодаря ему, потому что знаю С#, а не Java.
            • 0
              В моем случае разработка вся на Unity (там тоже c#), но вот момент написания плагинов заинтересовал. Мб что получится найти по этому поводу.
        • 0
          А с камушком можно по-подробнее технику показать?
          Это в z-brush'е слепить и сделать ретопологию или как?
          • +1
            Моделировал в Blender. Z-Brush-ем не пользовался, поэтому затрудняюсь сказать, как там. Что касается Blender, то как на картинке:
            — создаем примитивы
            — накидываем на них два модификатора Subdivision Surface (первый с режимом Simple, второй Catmull-Clark)
            — переходим в режим скульптинга и ставим галочку на Dyntopo (при таком режиме в активной области будут достраиваться полигоны в нужном количестве) и далее уже кистями вырисовываем нужные нам формы
            — как только визуально закончили, переключаемся в режим Vertex Color, красим камушки нужным цветом + применяем Dirty Vertex Color (чтобы трещины и царапины немного затемнились)
            — Ну и заключительный этап — применить модификатор Decimate, который сделает из высокополигональной модели — низкополигональную. Тут уже уменьшаем на свой вкус.
            • 0
              Большое спасибо.
              Как раз сейчас нужно замоделить лоуполи, интересная техника.
              • 0
                Да, пожалуйста, если по тексту что-то не понятно, пишите в личку, помогу чем смогу.
              • 0
                Спасибо за такой подробный гайд. Возможно как-нибудь руки дотянутся до Blender, чтобы попробовать это.
            • 0
              Удачи с новым проектом!
              Интересно почему вы начали сразу с 3D игр, вообще рассматривали 2D?
              • 0
                Спасибо! Касаемо 3D — да, дело в том, что мне гораздо легче что-то смоделировать, чем нарисовать красивые спрайты для 2D игры.
              • 0
                Здравствуйте. Отличная статья. А как глубоко проникнулись в Unity?
                • 0
                  Сложно сказать, это пока ещё второй проект + работаю один, нет человека, который мог бы подсказать что-то либо же указать на ошибки. Поэтому даже не знаю что и сказать по этому поводу. Ну, знаний для не сложных проектов достаточно, но если сказать мне создать сложнейшую MMO игру, то тут я думаю зафейлю конкретно, начиная от организации хранения игровых данных, заканчивая взаимодействием между классами и прочим. Я к тому, что ещё много чего предстоит изучить, но если брать сравнение с первый проектом, то рост очевиден.
                • 0
                  В каком формате Вы используете 3d модели в unity? в blender или конвертируете в другой формат?
                  Как Вы нарисовали текстуры в таком стиле? Для этого нужны какие-то навыки?
                  • 0
                    Использовал в формате blender, т.к. не хотел возиться с конвертированием в fbx, да и формат blender юнити прекрасно читает. В настройках импорта модели задаю нужные мне параметры (ну там анимации отключить, убрать галочки с импорта камер и прочее) и все, можно использовать. Единственное, там есть проблемы в различии между координатами. Юнити вроде сам автоматически правит их, но не всегда срабатывает, поэтому прежде чем начать моделировать меши в Blender, сам Object нужно развернуть на 90 градусов по оси X.

                    Касаемо текстур — в игре кроме UI вообще не используются текстуры. Все модели имеют Vertex Color и соответствующий шейдер, который способен отображать Vertex Color. В Blender, чтобы раскрасить модель, нужно зайти в режим Vertex Paint и смело рисовать.
                  • 0
                    Спасибо, отличная статья.
                    А как проходила оптимизация под Android и на какой framerate ориентировались? Какие ограничения изначально себе ставили в плане применяемых шейдеров, частиц, кол-ва SetPass Call и т.д.?
                    • +1
                      Framerate высокие, 60fps, т.к. сама игра достаточно динамичная, нужна высокая частота кадров. По ограничениям, на офф юнити есть цифры, что для мобильных платформ не больше 100k вертексов в кадре. У меня пик 75k вертексов, в среднем 50-60k (на максимальной графике, если отклчить тени, то до 20-30k опускается).

                      По SetPass Call вышло в среднем 35-50. Касаемо частиц, просто старался делать так, чтобы частицы не покрывали весь экран и не создавали большую нагрузку. Благо для этого есть старый планшет, на нем прекрасно можно было протестировать партикли. По нему уже подбирал так, чтобы не тормозило. В основном очень хорошо помогала опция во вкладке Render — Max Particle Size. Её можно выкрутить так, чтобы вдали партикль выглядил большим, а при приближении частички уменьшались (чтобы не было большого покрытия экрана прозрачными спрайтами). Ибо чем меньше пикселей покрыто партиклем — тем меньше нагрузка (для слабых девайсов, где это критично).

                      По шейдерам и вовсе все просто: Vertex Color, Vertex Color Anim, для UI стандартный + шейдер воды и для партиклей. Никаких размытостей не использовал.

                      За счет того, что в игре кроме UI нет текстур + все выглядит довольно низкополигонально, позволил себе использовать динамичные тени + пост обработку в виде bloom (качал ассет, который сейчас уже платным стал). Тем не менее, даже в среднем сегменте игра вывозит на 60fps на максимальных настройках.

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