Самый первый вопрос, который я задал себе это выбор платформы публикации. Выбор платформы я делал по ценам или методом исключения: в Steam 100$ за игру, на IOS 100$ в год, выбор пал на Android. Заплатил 25$ в Google Play, получил аккаунт и началась разработка.
Я решил опираться на самые сильные и простые стороны движка. Лучше всего для этого подходила 2D физика, на её основе я и решил построить игру.
Но что это будет, в чём концепция? Я решил пойти за вдохновением на ютуб и нашёл ролик о том, как сделать генерацию уровней из пиксельных картинок. Я захотел так же.
То, что я переписал
Переписал систему, нарисовал уровень и протестировал генерацию. Подумал: «А что дальше?». И вдруг — озарение. Идея пришла мгновенно и пазл сложился воедино. Почему бы игроку не быть шариком, а управлять дать ему гравитацией? «Отличная идея» — подумал я и начал творить геймплей.
После передо мною встала задача: каким образом игрок будет управлять красным шариком. Вариантов за всё время разработки я напридумывал всего 4:
1) Радиусный
Игрок касался бы экрана, ставя точку отсчёта, относительно дальнейшего движения пальца гравитация менялась. Сила зависила от дальности точки отсчёта, а направление от угла между ними.
2) Фиксированный радиусный
То же, что и Радиусный, только точка отсчёта находилась бы строго в центре экрана
3) Двухсторонний (нажатие)
При нажатии на левую или правую часть экрана можно было повернуть «гравитацию» вместе с камерой на определённое количество градусов влево или вправо соответственно.
4) Двусторонний (зажатие)
Тот же принцип что и у Двустроннего (нажатие), только необходимо было зажимать и вращение происходило с фиксированной скоростью.
1 и 2 я сразу же отмёл из-за их сложности понимания и неинтуитивно понятного управления. Для мобильной игры не подходило. Но, к сожалению, 4 мне пришёл в голову на этапе постпродакшна, пришлось брать 3. Скажу честно, очень плохое решение (серьёзно, не надо так). У этого управления было два катастрофических недостатка.
- Первый заключался в его резкости, дёрганности. При повороте изображение резко и очень неприятно сильно менялось. Я давал протестировать, сказали, что из-за управления не понимали куда идти и как играть, а половину «тестеров» начало укачивать.
- Вторая проблема чисто техническая: при повороте игра подлагивала от 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)
ThisMan
16.05.2019 13:37P.S: Для статьи специально трейлер смонтировал
Это на видео кадров не хватает или анимация в игре такая же, просто она не плавная от слова совсем. Не то что бы хочу игру обругать, но как предложение: попробуйте сделать прокрутку мира плавнее, а не как сейчас рывками. Это сильно бьет по глазам
VertogPro Автор
16.05.2019 13:45Я просто с телефона записывал, + ещё неправильные параметры выбрал на монтаже. Получилось, что получилось.
ThisMan
16.05.2019 13:47Почему бы не поправить и не перезалить? Раз это превью вашей игры, оно должно выглядеть красиво
VertogPro Автор
16.05.2019 13:57Я посмотрел на настройки Premiere Pro и вроде там всё правильно. Видимо проблема в материале для монтажа, слишком сильное сжатие. Я бы хотел исправить, но думаю это того не стоит, что бы опять мучаться с записью экрана телефона + повторным монтажом.
forewar
16.05.2019 18:38-1Я было хотел написать комментарий, но потом стало лениво, да и смысла нет.
Но этот текст я уже написал, а удалять тоже лень, так что нажму, пожалуй, кнопку Отправить.
shalm
17.05.2019 04:02Может имеет смысл попытаться сделать генерацию уровней, а не рисовать их вручную?
VertogPro Автор
17.05.2019 05:29Идея хорошая, но не для меня. Когда я создавал, я не заморачивался над такой штукой как рандомная генерация. У меня вручную получается гораздо лучше. Не взял генерацию потому что:
- Сложно писать алгоритмы генерации
- Уровни были бы предсказуемы или непроходимыми
- Я просто ленивый)
shalm
17.05.2019 08:51Прога которая генерит левел может быть отдельной, вы их можете предварительно выбрать и включить в игру, только те, что показались удачными. Можно конечно и в игру включить генерацию и создавать уровни на лету, тогда получится не с сотней уровней, а бесконечная игра.
Задача создать алгоритм генерации согласен сложная, но интересная. И предсказуемость зависит только от Ваших алгоритмов, проходимость тоже сама прога может проверить.
svkozlov
17.05.2019 19:09Будьте добры, реализуйте плавный поворот уровня. Включил видео и глазам стало больно.
Спасибо за статью.VertogPro Автор
17.05.2019 19:13Я решил не переделывать эту игру, а создать новую. Потому что ну слишком много шероховатостей, проще будет создать изначально, с нуля, чем переписывать готовый продукт. Так что, скоро сиквел)
panteleymonov
Скажи честно ты прям работаешь разработчиком игр на unity? Я понимаю что это твоя первая работа на unity и на программирование ушло меньше времени. Скажем так, я был на конференции в местной школе, (просто позвали рассказать про игрострой) где школьники показывали свои игровые поделки сделанные за два дня — неделю, на pascal abc net — в общем уровень тот же.
Гироскоп никак?
Статья не плоха даже завидно. Но, честно, меня бомбит от статей с примерами, которые делаешь сам за пол часа, а тут этот пример выкатывают в Google Play. Возможно у меня уже крышняк рвет от обилия фирм с профессионалами, которые стругают такие, поделки.
UncleJey
на поверку крайне неудобно с ним играть.
Ну и скоро не то чтобы цыплята мемуары писать начнут.
В школе будут задавать за летние каникулы 20 статей на хабре.
panteleymonov
JustDont
Теперь вам должно стать понятнее, почему мобильные сторы — это 99% мусора и 1% чего-то отличного от мусора. Впрочем, по более серьезным категориям приложений соотношение пока еще не такое плачевное.
VertogPro Автор
Скажу честно, я не профессионал, я самоучка. Я, делая игру, параллельно учился этому всему. Я учился по гайдам на ютубе, потом перешёл на документацию и форумы.
Я хотел так сделать, но я просто не умел. Как-то лень было переделывать, а в конце работы было бесмысленно перерабатывать.
Эту игру я делал не полчаса, а полгода. Я правда старался, и если посмотреть на похожие, то моя игра не такая уж и ужасная.
panteleymonov
Обрадует тебя это или огорчит, но, в этом нет твоей вины. Сейчас очень много dudu подобных контор, где уровень проектов не чуть не выше, отличие лишь в оформлении. И ты вполне бы мог претендовать на должность Unity C# Developer от 170 000 руб, осталось только теорию подтянуть, которую сейчас модно требовать взамен опыта. А на моей памяти люди с таким же опытом и в начальники умудрялись в 23 года выстрелить.
Если бы я суммировал весь свой предыдущий опыт с текущим проектом/примерами это тоже бы заняло не пол часа. 20 лет, вместе со сном и прочим беспределом. Тот же тетрис, с учетом что он за час пишется, у меня на незнакомом языке занял 8 часов, а это рабочий день.
Или ты хочешь сказать, что каждодневно, методично по 8 часов в день с выходными, кропел над ней?