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

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

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

У себя на канале, да и в жизни я занимаюсь созданием 3д графики и анимации, но в один день подумал, а почему бы не попробовать оживить графику, которую я создал. А мысль о том, что графика для игры уже готова только грела мой интерес.

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

Я решил выбрать один из трёх своих проектов. И выбор пал на Super Mario Brosthers 3. В этой игре достаточно простая механика, минимум анимации и интуитивно понятное управление. И делать я её решил конечно в 3д.

Так как я никогда не разрабатывал игры, то иногда мне было ой как непросто. Но обо всё по порядку.
Как я и говорил, у меня был какой-никакой опыт работы в Unity и опыт написания кода на языке C#. Но, в общем, это всё, что мне могло помочь. Я решил начать с простого: подготовить графику для загрузки в движок.
Несмотря на то, что вся графика была готова, мне всё равно пришлось многое доделывать и переделывать. Где-то была неподходящая геометрия или размеры, а в других местах путаница с материалами.

Если раньше научиться программированию во Flash можно было по книгам, то теперь всё то же самое, а то и больше делает для нас YouTube.

Я начал понемногу расставлять объекты на сцене и даже добавил камеру.
Если вы играли в Марио с 3д графикой после классических платформеров, то могли ощущать какое-то чувство неудобства. Разработчики переносили Марио в 3д, но вся атмосфера почему-то тут же пропадала.

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

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

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

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

Коллизии или столкновения ещё одна важная часть всех 2д и 3д игр. К объекту привязывают коллайдер, который реагирует на столкновения и, например, даёт знать программисту, что игрок упал в яму или задел противника.

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

Пока игра больше похожа на бюджетную версию Geometry Dash с кубами в качестве героев, но совсем скоро я импортирую модельки и добавлю для них анимацию.

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

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

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

Для 8битной игры врагов здесь действительно много. Только в первом уровне их целых шесть видов. Я решил ограничиться всего тремя, но для начала их вполне хватит.
Цветок вылезает из трубы и плюётся огненным шаром.
Я написал таймер, который заставляет врага появляться и исчезать бесконечное количество раз.

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

В будущем, можно будет, например, сделать местный магазин скинов и за монетки, собранные в игре, продавать для Марио новую одежду или даже усы. Должно получится интересно.
Я добавил в Blender анимации бега и прыжка и отправил Марио прямиком на сцену игры.

Настроить анимацию в Unity ещё та задача. Даже для человека, который уже долгое время работает в 3д программе и настраивает анимацию в ней. Здесь всё совсем по-другому. Большую часть времени всего создания игры ушло именно на добавление и редактирование анимации. И последний найденный баг был именно в анимации. Уверен, что вы, поиграв, без проблем найдёте ещё десяток багов.

Один из самых узнаваемых врагов всей серии Марио - это конечно же Гумба. Я до сих пор не понимаю кто это, но Гумба по-прежнему напоминает мне сову.

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

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

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

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

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

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

Какое-то время назад и я понятия не имел что значит быть разработчиком игр. И если вы чего-то действительно захотите, всё что нужно - это упорство.
Оригинальное видео:
Комментарии (3)
exadmin
09.07.2022 13:27+1Очень поддерживаю выбранную концепцию 3д, она простая, как в оригинале, но при этом с шармом трёхмерности.
Mirkom63
Кайф! Сам сейчас Unity изучаю и даже не подумал что можно чисто по фану для учебы создать уже готовую старую игру поностальгировать) Возьму на вооружение!
dendead Автор
Спасибо!) Да, всё возможно)