Создал свою первую в жизни игру

d649aa5f3f72ab2f0943955707dc2ac6.jpg

Всем привет, это Денис Вебер.

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

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

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

269fee6aece751c49e790dbe871eb75d.png

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

6d2ca56403ac2bee730c9a0129104c50.png

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

13d7a0305d8054e78b2c403d154b4dc8.png

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

df53f25425d6388ae1712800a0399d5c.png

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

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

d5ecf498f983a5afaf84cccadcef478a.png

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

4c738f90af3a0491d24a94457d20fd83.png

Так как я никогда не разрабатывал игры, то иногда мне было ой как непросто. Но обо всё по порядку.

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

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

a7e5b0315ecf6c4ad2d8342e89f47b8f.png

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

2dbea3412d74c2421bb7cdbf1e269471.png

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

6c120ec632a0ccd4f7d59cb9d9fa713c.png

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

29a2836e1ac220a08db77776dc6f8367.png

Как вы увидите чуть позже, свет и текстуры играют важную роль в восприятии игры. И нужно будет постараться, чтобы правильно настроить их в Unity.

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

d82699cccaaa14be4c42cc718b5ee068.png

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

711e4762ea0d5a758054679fc15604bc.png

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

3141a99dcd9d4cd3191d79df74eeda4f.png

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

036b201db3b142ca91b6e91c569c070d.png

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

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

9dfc9ebf7ce0961a5f8ed055933ee1f5.png

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

d94b7422b205a06a88d09fe17a7c333e.png

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

19e865a6f26cfe36bf56f6ee3680634a.png

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

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

f814bef6eea81663016457d03d668b53.png

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

d2844b3bffd029237b9a5ae213d681b6.png

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

fc9f51b062054ce17cae75fd975fd2f3.png

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

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

a3eb21e4befd28dec2d3be784d14b51c.png

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

Я добавил в Blender анимации бега и прыжка и отправил Марио прямиком на сцену игры.

5e6d58711c915c83dae8d215293bb5cc.png

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

66d4a3b1c63d73ca2ecfa38ad27c39e0.png

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

f39c25f2dc27e202dcd3d569bb32c66b.png

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

d7185fa667acc4e78cf200502aa7e77e.png

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

73458260475b87fc03be8c446f4e1612.png

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

650aef0044569d912eb373d344aa179c.png

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

dc7d5218569c781a1aff0ec194839d61.png

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

ed7fc0eda42b9afa45cc204a24006808.png

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

Кто знает, может моим следующим проектом станет игра по мотивам Battletoads.

0ea852326aa37407675d5da2a072e5fc.png

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

Оригинальное видео:

© Habrahabr.ru