Привет, Хабр. Я разработчик игр на Unity (как-то низко прозвучало) и хотел бы рассказать об этапах разработки моей первой игры. История берёт начало 2 года назад, когда я решил попробовать делать игры. Начинал с гайдов на ютубе. После, создав пару примеров, приложений и мини-игр, я решил создать полноценную игру. Естественно я представлял настоящий эпик, сюжет и настоящие 10 из 10. Мои амбиции были безграничны, но я не знал, что ждёт меня впереди.

Самый первый вопрос, который я задал себе это выбор платформы публикации. Выбор платформы я делал по ценам или методом исключения: в Steam 100$ за игру, на IOS 100$ в год, выбор пал на Android. Заплатил 25$ в Google Play, получил аккаунт и началась разработка.

Я решил опираться на самые сильные и простые стороны движка. Лучше всего для этого подходила 2D физика, на её основе я и решил построить игру.

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


То, что я переписал

Переписал систему, нарисовал уровень и протестировал генерацию. Подумал: «А что дальше?». И вдруг — озарение. Идея пришла мгновенно и пазл сложился воедино. Почему бы игроку не быть шариком, а управлять дать ему гравитацией? «Отличная идея» — подумал я и начал творить геймплей.

После передо мною встала задача: каким образом игрок будет управлять красным шариком. Вариантов за всё время разработки я напридумывал всего 4:

1) Радиусный

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

2) Фиксированный радиусный

То же, что и Радиусный, только точка отсчёта находилась бы строго в центре экрана

3) Двухсторонний (нажатие)

При нажатии на левую или правую часть экрана можно было повернуть «гравитацию» вместе с камерой на определённое количество градусов влево или вправо соответственно.

4) Двусторонний (зажатие)

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

1 и 2 я сразу же отмёл из-за их сложности понимания и неинтуитивно понятного управления. Для мобильной игры не подходило. Но, к сожалению, 4 мне пришёл в голову на этапе постпродакшна, пришлось брать 3. Скажу честно, очень плохое решение (серьёзно, не надо так). У этого управления было два катастрофических недостатка.

  1. Первый заключался в его резкости, дёрганности. При повороте изображение резко и очень неприятно сильно менялось. Я давал протестировать, сказали, что из-за управления не понимали куда идти и как играть, а половину «тестеров» начало укачивать.
  2. Вторая проблема чисто техническая: при повороте игра подлагивала от 0.1 до 1-2 секунд, поскольку вращала не камеру с гравитацией, а ЦЕЛЫЙ УРОВЕНЬ. А уровни порой доходили до 10000 объектов. Думаю не стоит объяснять как реагировало устройство на подобный фокус с тригонометрией. Это я заметил в середине разработки, но исправлять не решался, поскольку я не умел менять направление 2d гравитации (знаю, сглупил) и я просто ленился.



Да и сейчас бы исправить так просто не получилось бы, не переполошив форумы и документацию. Когда я захотел хотя бы попробовать исправить баг, я не стал, так как менять гемплей было нельзя. Переделка управления под 4 тип испортило бы готовые 80% контента, заточенные под 3 тип управления.

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

Я начал программировать ассеты головоломок, и на это у меня ушло немало времени. Целых 2 месяца я потратил на разного рода объекты и скрипты для их взаимодействия. Уровни представляли из себя простые bit-map текстуры с отчётливыми пикселями, цвет которых обозначал свой блок.

Обозначения
Белый — Фоновый блок
Чёрный — Простой блок
Красный — Игрок
Голубой — Финиш
Оттенки жёлтого — Телепорт
Тёмно-красный — Красный шар
Зелёный — Зелёный шар
Просто жёлтый — Звезда
Светлый оттенок серого — Блоки-прямоугольники
Тёмный оттенок серого — Фальшивые блоки
Оттенок жёлтого потемнее — Фальшивые телепорты
Оттенок жёлтого средней тёмности — Фальшивые звёзды
Тёмно-голубой — Фальшивый финиш
(Многовато фальши)







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


«Твоя игра уже надоела, сделай другую» — говорили друзья, но я всё равно продолжал. Я запланировал 100 уровней. На их создание ушло 4 месяца. Создавал я их параллельно вместе с технической частью. В итоге мой план по уровням «заставляющие думать» получился почти никак. Я таких уровней могу назвать от силы штук 10 — 15, остальные были сложны другим. Они были сложны наличием узких коридоров, сложностью ориентации в пространстве, абсолютно мазахисткими дизайнерскими решениями и, конечно же, минами с лабиринтами. Но за их создание отвечал уже не я. Мои «наёмные работники» создали в общем около 60% контента игры.

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

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

В игре есть подсказки, но сделаны они были очень быстро, а следственно некачественно. В начале уровня появляется текст с моим комментарием по типу «Сложно?», или «Подумай!».

Программировал я игру на Unity 2017.1. Тогда на дворе был уже 2018 год и версию Unity 2018.2 я мог бы скачать, но не стал. Ведь я просто не хотел мучаться с переносом игры и возможными багами. Когда пришло время финальной компиляции, я этого сделать не смог. Причина тому — отсутствие Android sdk. Я на поиски потратил неделю, экспериментировал сочетанием новых версий движка (только 2017 года), изменением их настроек и бесчисленно огромным количеством sdk (300 гб для 24 разных одинаковых sdk). В итоге остановился на сторонней программе по установке sdk, версией движка 2017.3 и типом предложения Intent. Как же я был счастлив когда скомпилировал игру.

На её публикацию у меня ушло 3 дня.

Сложность заключалась в заполнении анкеты и необходимости заполнять описание на 18 языках (не слишком интересное занятие). Локализовывал я всё это через google translate. На создание обложки и скриншотов ушло не так много времени.

Обложка и скриншоты






Несмотря на полное отсутствие пиара (кроме личной рекомендации) у игры в целом стабильные значения. Каждый месяц в среднем 4-7 установок.

В первый месяц трафик я подогнал, рассказав неравнодушным.


В последующие полгода прирост был ощутимее. Пик установок произошёл в конце лета и осени.


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


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

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

Кстати, я как раз разрабатываю сиквел, авось что получится…

P.S: Для статьи специально трейлер смонтировал:

Комментарии (16)


  1. panteleymonov
    16.05.2019 12:11

    Я разработчик игр на Unity (как-то низко прозвучало) и хотел бы рассказать об этапах разработки моей первой игры.

    Скажи честно ты прям работаешь разработчиком игр на unity? Я понимаю что это твоя первая работа на unity и на программирование ушло меньше времени. Скажем так, я был на конференции в местной школе, (просто позвали рассказать про игрострой) где школьники показывали свои игровые поделки сделанные за два дня — неделю, на pascal abc net — в общем уровень тот же.

    Вариантов за всё время разработки я напридумывал всего 4:

    Гироскоп никак?

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


    1. UncleJey
      16.05.2019 12:21

      Гироскоп никак?

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

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


      1. panteleymonov
        16.05.2019 12:35

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


    1. JustDont
      16.05.2019 12:55

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

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


    1. VertogPro Автор
      16.05.2019 13:43

      Скажи честно ты прям работаешь разработчиком игр на unity?

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

      Гироскоп никак?

      Я хотел так сделать, но я просто не умел. Как-то лень было переделывать, а в конце работы было бесмысленно перерабатывать.

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

      Эту игру я делал не полчаса, а полгода. Я правда старался, и если посмотреть на похожие, то моя игра не такая уж и ужасная.


      1. panteleymonov
        16.05.2019 14:48

        то моя игра не такая уж и ужасная.
        А кто сказал что она ужасная? Или ты предполагаешь что на конференции школьников помидорами забрасывали?
        Скажу честно, я не профессионал, я самоучка.
        Обрадует тебя это или огорчит, но, в этом нет твоей вины. Сейчас очень много dudu подобных контор, где уровень проектов не чуть не выше, отличие лишь в оформлении. И ты вполне бы мог претендовать на должность Unity C# Developer от 170 000 руб, осталось только теорию подтянуть, которую сейчас модно требовать взамен опыта. А на моей памяти люди с таким же опытом и в начальники умудрялись в 23 года выстрелить.
        Эту игру я делал не полчаса, а полгода.
        Если бы я суммировал весь свой предыдущий опыт с текущим проектом/примерами это тоже бы заняло не пол часа. 20 лет, вместе со сном и прочим беспределом. Тот же тетрис, с учетом что он за час пишется, у меня на незнакомом языке занял 8 часов, а это рабочий день.

        Или ты хочешь сказать, что каждодневно, методично по 8 часов в день с выходными, кропел над ней?


  1. ThisMan
    16.05.2019 13:37

    P.S: Для статьи специально трейлер смонтировал

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


    1. VertogPro Автор
      16.05.2019 13:45

      Я просто с телефона записывал, + ещё неправильные параметры выбрал на монтаже. Получилось, что получилось.


      1. ThisMan
        16.05.2019 13:47

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


        1. VertogPro Автор
          16.05.2019 13:57

          Я посмотрел на настройки Premiere Pro и вроде там всё правильно. Видимо проблема в материале для монтажа, слишком сильное сжатие. Я бы хотел исправить, но думаю это того не стоит, что бы опять мучаться с записью экрана телефона + повторным монтажом.


  1. forewar
    16.05.2019 18:38
    -1

    Я было хотел написать комментарий, но потом стало лениво, да и смысла нет.
    Но этот текст я уже написал, а удалять тоже лень, так что нажму, пожалуй, кнопку Отправить.


  1. shalm
    17.05.2019 04:02

    Может имеет смысл попытаться сделать генерацию уровней, а не рисовать их вручную?


    1. VertogPro Автор
      17.05.2019 05:29

      Идея хорошая, но не для меня. Когда я создавал, я не заморачивался над такой штукой как рандомная генерация. У меня вручную получается гораздо лучше. Не взял генерацию потому что:

      • Сложно писать алгоритмы генерации
      • Уровни были бы предсказуемы или непроходимыми
      • Я просто ленивый)


      1. shalm
        17.05.2019 08:51

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


  1. svkozlov
    17.05.2019 19:09

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


    1. VertogPro Автор
      17.05.2019 19:13

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