Делаю минималистичный платформер

С детства мечтал разрабатывать свою игру и вот есть чем поделиться.

Делаю минималистичный платформер

На ДТФ я достаточно давно. Читая истории о том, как кто-то в одиночку разрабатывает свою игру всегда начинал сам об этом мечтать. Но когда лет 5 назад изучил подробнее разработку видеоигр, меня сразу испугали программирование, создание ассетов, покупка места в Steam и еще куча мелочей. Геймдев так и остался в мечтах.

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

И вот спустя около года с того момента хочу поделиться с вами историей разработки моей первой игры. Игра называется Leo: The Square — это минималистичный платформер, который акцентирует внимание на атмосфере и сюжете. Игроки исследуют различные локации, решают головоломки и встречают уникальных персонажей.

Предыстория: подробнее о том, что было до Leo и технические детали

Немного изучив тему движков решил выбрать Unity. Так как хотел разрабатывать 2д игру и мне было важно чтобы в интернете было как можно больше информации о том, или ином решении. Изначально думал установить себе расширение с визуальным программированием, но затем пришел к выводу, что раз уж начал изучать что-то новое было бы неплохо понимать как писать код. Мне это стало правда интересно и оказалось, что тема программирования совсем не скучная. Сейчас понимаю, что раньше боялся просто изучать что-то новое. Был какой-то непонятный страх, будто убеждал сам себя что это невозможно.

Что-то похожее испытывал и в желании играть на фортепиано. Всю сознательную жизнь мечтая об этом, при этом убеждая сам себя что это уже невозможно (будто я резко решил играть в НБА, или стать балериной). По итогу сейчас разрабатываю игру и хожу на занятие к преподавателю в музыкальную школу. Да, теперь виню себя что не занимаюсь тем или другим чаще, но по крайней мере честен перед самим собой, что начал заниматься тем чем всегда хотел.

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

Обложка для Стим<br />
Обложка для Стим

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

Мне правда очень жаль времени которое потратила моя девушка… И пиксель арт на самом деле рисовать сложнее чем векторную графику. И вообще нужно сначала все протестировать, а затем начинать рисовать арт. Забавно, как тогда мне казалось все понятным, но на деле оказалась, что ты все равно совершишь много ошибок. Вдобавок через некоторое время после начала разработки девушку повысили на работе и она начала работать 5/2.

концепт-арт (да, девушка даже его сделала)<br />
концепт-арт (да, девушка даже его сделала)

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

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

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

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

Формирование идеи и целей разработки

После того как я уже перестал разрабатывать BLYX, начал читать книгу Джесси Шелла “Геймдизайн”. Тогда у меня было много работы и разных других дел. Параллельно чтению книги заодно смог обдумать четче свои идеи и желания.

Пока читал, осознал, как много всего я воспринимал неправильно, попутно понимая, как много мне еще предстоит изучить. В то время у меня в голове держалась идея одной игры. Я видел простые формы на светлом фоне, представляя себе снова платформер, но только с более простым визуальным стилем и без боевой системы (в Бликсе она была). Чтение книги затянулось до того момента, пока работы почти не осталось и уже было бы неплохо начать разработку.

думал об этом ассет паке, он немного похож на то, что я представлял. конечно, тогда получилась бы совсем другая игра<br />
думал об этом ассет паке, он немного похож на то, что я представлял. конечно, тогда получилась бы совсем другая игра

Окончательно сформулировать мои идеи мне помогло вот это видео от геймдизайнера по имени Filip Hráček. Очень его рекомендую. В целом, со временем стал меньше смотреть девлоги от других инди-разработчиков, так как чаще всего они меня расстраивали. Почти всегда это какие-то software developer-ы, супер прошаренные в программировании и прочем. Больше смотрел конкретно о геймдизайне, слушал какие-то лекции на GDS и старался максимально много узнать о дизайне уровней.

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

количество игр в Steam по жанрам<br />
количество игр в Steam по жанрам

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

Для меня важнее выпустить игру. Я согласен с утверждением из этого видео, что 99% состоит в релизе. Какой бы крутой идея не была, это не имеет смысла, если не смогу довести её до релиза.

Чем больше способностей, тем сложнее сделать сбалансированный и интересный уровень. Это я также понял при работе над предыдущей игрой. Поэтому здесь увеличение сложности происходит благодаря появлению новых препятствий на уровне, а не открытию новых способностей у игрока. Точно так же, как это происходит, например, в Super Meat Boy или в Celeste.

Цель перед разработкой поставил себе одну: выпустить игру в Steam. Мне понравилась мысль из книги Джесси Шелла о том, что первые десять игр у тебя будут плохими. Главное — как можно быстрее их выпустить.

На протяжении разработки мне хотелось бы изучить:

  • основы геймдизайна
  • основы создания уровней
  • создание главного меню и базовых настроек в нем
  • поддержку геймпада
  • поддержку достижений в Steam
  • загрузку и обновления игры в разные цифровые магазины (но прежде всего в Steam)

Формируя идею игры, начал искать и изучать референсы. Когда нашел игру Thomas Was Alone, осознал, что это больше всего похоже на то, что я хотел бы увидеть. Я не расстроился, увидев эту игру, хотя она уж очень была похожа на мою, а наоборот, обрадовался тому, что подобную идею возможно сделать стильно и классно. Затем нашел более нишевую игру E.Z., у которой схожий визуальный стиль и при этом неплохое (как по мне) количество отзывов. Она смотрится просто, но при этом достаточно стильно. А поиграв в неё, понял, что она еще и достаточно креативна в создании испытаний, которые преодолевает игрок.

В итоге визуальный стиль в моей голове стал вырисовываться более мрачным. Героя почему-то еще до старта разработки мне хотелось назвать Лео, и видел я его квадратом. Название придумал быстро. И вот как, более-менее понимая, что из себя будет представлять игра, приступил непосредственно к разработке.

Начало разработки: первые шаги, проблемы и их решения

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

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

Leo: The Square<br />
Leo: The Square

Сначала сделал передвижение, затем добавил прыжок. Потом добавил coyote time (то есть чтобы игрок мог прыгнуть, находясь уже за краем платформы), и неудачно пытался добавить jump buffer (то есть чтобы игрок мог прыгнуть чуть раньше касания земли, если он нажал прыжок). На проблему с jump buffer тогда просто закрыл глаза (далее конечно пожалел об этом). По итогу начал делать прыжки от стен. Все это делал по различным туториалам. Конечно, при таком бездумном подходе что-то не работало, и я застрял на прыжке от стены.

Тут накладывается еще тот факт, что за перерыв между разработкой я забыл свои небольшие знания С#. Оказалось, что это были скорее не знания, а какие-то обрывочные фрагменты которые даже не мог применить. За помощью обратился к своему знакомому, который когда-то работал в Юбисофт и 4A Game, а сейчас работает на аутсорс фирму. До этого мы с ним виделись один раз, но я все таки решился написать ему и попросил помочь разобраться.

Мне было приятно, что он откликнулся на предложение и был дружелюбен, было видно что ему это тоже интересно. Как оказалось я все делал неправильно. Мне было стыдно, что почти весь код на тот момент был из туториалов и я его даже не особо понимал, по итогу он посоветовал дельную вещь: начать делать мувмент заново, держа в голове те ошибки которые нашли.

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

Рекомендую. Боб рассказывает все как ребенку. Мне такой подход нравится.

Начал писать движение персонажа сначала. Сразу увидел, что джамп баффер не работает. В этот раз его убрал, но прыжок от стены все равно не работал. По итогу созвонился со знакомым еще раз. Он похвалил, что на этот раз по крайней мере понятно что написано. Мы начали разрабатывать прыжок от стены самостоятельно. Понравилось, что он не говорил что мне писать, а хотел чтобы я сам понял и лишь подталкивал к нужному решению. За один созвон сделали работающий прыжок от стены, который впоследствии чуть исправили (что-то я добавил сам, что-то узнавал у него в переписке).

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

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

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

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

Делаю минималистичный платформер

После того как сделал прыжок от стены и джамп баффер, движение персонажа по сути было завершено. Далее добавил анимации растягивания и сжатия при прыжке. Далее при приземлении. По итогу совместил самое простое и понятное из разных туториалов. Сложно было настроить затем все анимации правильно.

Моя девушка сделала дизайн персонажа, за что я ей очень благодарен. В этот раз это не заняло много времени, но мне очень понравился его вид. Анимации у него простые. Когда двигается смотрит в сторону движения. Если игрок долго стоит, он посмотрит в разные стороны (долго думал как это сделать, но смог). Но затем надо было настроить чтобы персонаж при движении тоже смотрел направо, чтобы правильно отображался прыжок в движении и приземление (его было настроить сложнее всего). Но по итогу вроде как получился приемлемый результат, может быть еще чуть его подправлю.

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

Далее сделал ключи которые открывают двери, лампочки которые светятся если их задеть (сам придумал такую механику, пока думаю как её использовать). Если у вас есть варианты её применения, пишите.

Чем занимаюсь сейчас и планы на будущее

Делаю минималистичный платформер

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

Уже сейчас могу сказать, что это не настолько легко как кажется изначально. Потому что перед разработкой казалось, что самое классное это делать уровни. Но на самом деле продумать идею уровня достаточно сложно. Это требует интеллектуальных усилий не меньше, чем написание кода. Возможно, даже больше. Ну и да, сделать хороший уровень очень и очень сложно. И хотя мне казалось, что я разбираюсь в видеоиграх и геймдизайне, на деле это конечно же оказалось не так. Очень многое стоит изучить и книга Джесси Шелла это только начало. “Направлять игрока и поддерживать его интерес с помощью создания виртуального пространства” — звучит не так весело, как “создание уровня для платформера”.

Еще множество механик на деле оказались не до конца продуманными, либо поломанными. У копьев и пил надо было поправлять правильно коллайдеры, чтобы они не убивали игрока раньше времени. Но самой сложной стало решение движущийся платформы, которая меняла масштаб персонажа под свой (то есть если платформа была х2 персонаж тоже становился х2) и еще игрок на ней подвисал. В итоге решил растягивание достаточно просто: не трогал масштаб через движок, а создал два разных спрайта для платформ разных размеров. Проблема застревание персонажа решалась дольше. Кажется, она решилась тем, что я добавил материал к rigidbody (придает объекту физику).

В ближайшем будущем планирую закончить первые 10 уровней (сейчас есть 5) и позвать друзей их тестировать. Затем исправлять и делать следующие десять. Всего планирую где-то около 30-40 уровней. Затем начну создавать музыку для игры, добавлять звуки и прописывать сюжет. Сейчас представляю себе подачу истории через короткие кат-сцены после кого-то количества уровней. Не знаю как выйдет по итогу, но я уже прочитал “Историю на миллион долларов” Макки и еще есть конспекты множества книг по сценарному мастерству. Думаю, об этом так же расскажу отдельно.

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

Leo: The Square в Steam

9393
11
42 комментария

Поддержу тебя комментарием. Пускай все пойдет у тебя как по маслу.

4
Ответить

спасибо большое!

Ответить

Отличная статья, годный кей-арт!
НО, как опытный индюк выскажу свое мнение. Можно прислушиваться можно нет:
Если твоя цель стать успешным инди разработчиком - заморозь и начни новый. Или заморозь код и думай над хуком, его сейчас нет.
Thomas was alone и E.Z. вышли когда, 5 лет назад? Твой путь сейчас очень напоминает путь нашего соотечественника с https://store.steampowered.com/app/1358440/Halver/
и она сделана идеально. Там все на кончиках пальцев, чувак её те же лет пять делал.
Есть миллион хороших идей небольших игр, они варятся на itch.io, на гейм-джемах - лучше потратить время на поиск такой. Сейчас ты вкладываешь очень много сил в изначально неконкурентную идею ещё на базе привлечения аудитории.

2
Ответить

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

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

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

1
Ответить

Спасибо за упоминание Халвера : )

От себя могу только пожелать автору действительно не слишком закопаться с игрой

1
Ответить

какой "оригинальный" проект, умрёт в 1000 таких же.

1
Ответить

Он и не стремится сделать какую-то мегапопулярную и мегауникальную игру.

2
Ответить