Создал свою первую в жизни игру
Всем привет, это Денис Вебер.
Думаю, что каждый человек, когда-либо игравший в игры, хоть раз задумывался о том как они устроены. В этот раз я решил примерить на себя роль разработчика и попробовать создаю свою первую в жизни игру.
Как обычно, специально для тех, кому больше нравится формат видео, а не текст, видео я оставлю в конце статьи.
Если во времена первых компьютеров и консолей создавать игры могли лишь на студиях с мощным оборудованием и какими-то нереальными умениями, то сейчас создание игр доступно куда большему количеству людей. И обычный программист, в одиночку собрав на коленке игру за один вечер может уже на следующий день стать знаменитым по всему миру.
Как сейчас помню, во времена расцвета браузерных и флэш игр я первый раз поймал себя на мысли, что точно хочу создать что-то своё.
Можно подумать, что мои попытки написать пару строчек кода в кадрах программы 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.
Какое-то время назад и я понятия не имел что значит быть разработчиком игр. И если вы чего-то действительно захотите, всё что нужно — это упорство.
Оригинальное видео: