30 января 2023 30.01.23 7 1600

А ТЫ уже сделал свою игру?!

+37

Здравствуйте!

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

*** Дисклеймер ***

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

Итак, для начала, нужно представиться. Меня зовут Егор, мне 21 год и я обожаю игры. С того дня как мне подарили PS One и по сей день, я прошёл сотни, игр.  В какой-то момент мне и самому хотелось создать что-то своё, но только взглянув на то, как выглядит программный код (это безумное нечто, состоящее из непонятных слов и фигурных скобок), я каждый раз оставлял эту мысль в покое.

Но как-то раз, примерно два года назад, моя девушка предложила мне сыграть в какой-нибудь хоррор. Посчитав это интересным занятием, я пошёл включать компьютер, перебирая и предлагая ей разные варианты: Outlast, Amnesia, Layers of Fear и т.д. Но в ответ я услышал, что это всё долго загружать, и лучше поиграть во что-то на смартфоне. Согласившись с этим, мы стали искать подходящего кандидата на просторах Google Play. Моё внимание привлекла одна игра. По механике игра представляла собой брождение по монотонной локации в поисках предметов, которая осложнялась вечно преследовавшей вашего персонажа «бабкой». То есть она ни теряла вас, ни искала, она всегда знала, где вы и шла за вами. Увидев, на количество загрузок (их было больше 50к), я #####. «КАК? ВОТ ЭТО? 50 тысяч? Да я сам такое могу сделать!». Спустя несколько минут, уже забывая про эту игру, я подумал: «Действительно, а почему бы не попробовать».

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

  • Знания в программировании ограничиваются школьным «Кумиром»;
  • Знание игровых движков — редактором карт в Far Cry 3 (Кстати вы знали, что, если в нем заспавнить много-много красных бочек и взорвать их, то они зависнут в воздухе и по ним модно будет прыгать?);
  • По рисованию в школе у меня была тройка;
  • С 3D моделированием я не знаком тем более;
  • Работа со звуком закончилась на гайдах по типу: " Как Сделать МОЩНЫЙ КАЧЕВЫЙ трек в FL Studio, Чтобы с бассами и Автотюном и т. д.» (Не любитель, просто было интересно).

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

Начало пути

Сёрфя интернет в поисках движка полегче, я наткнулся на Game Maker Studio (дальше GM). Он на самом деле довольно не сложный, имеет свой язык программирования, годится только для 2D игр (но вроде как с помощью разных ухищрений можно и сделать и что-то вроде 3D). Я создал какого-то персонажа, научил его ходить (или скорее летать) верх-вниз-вправо-влево и подумал что, на сегодня достаточно.

Так выглядел тот... Эм-м... Ну в общем мой п#здюк.
Так выглядел тот... Эм-м... Ну в общем мой п#здюк.

После перерыва в пару дней, я вернулся к своему зеленому крылатому другу и в окне редактора увидел странную надпись «Осталось 27 дней». Оказалось, что это 30-ти дневная демка, а за полную версию GM’а извольте платить. Догадываясь о том, что за месяц и ничего не успею сделать, я принялся к поискам нового двигателя для своего будущего шедевра и пришёл к ВЕЛИКОМУ и УЖАСНОМУ, всеми любимому и ненавистному Unity, так как он позволяет пользоваться собой не требуя взамен ничего. Ну и началось.

После относительно простого и понятного, как книжка с детскими сказками, GM’а, Unity показался мне огромной химической энциклопедией, написанной на древнем китайском. Куча непонятных компонентов, параметров, «Как сделать это? Как сделать то?». Ну, будем постепенно разбираться.

А может ли камень бегать?

Решил я сделать что-то трёхмерное, но пока не знал, что конкретно. Игрался со стандартными примитивами, перекрашивал их разными цветами, потом начал накладывать на кубы и шары текстуры своих друзей, пародируя шикарную призму с лицом одного американского президента, изменял гравитацию. Вскоре это стало надоедать и было решено взять под свой прямой контроль одного из геометрических товарищей. Так как скрипты для игр на Unity пишутся на C#, в котором я, понятное дело, ничего не понимаю, то на помощь пришли как текстовые, так и видео-гайды в интернете.

Кстати, немного о них и о сообществе разработчиков. В интернете можно найти огромное количество инструкций, которые помогут воплотить в реальность любую вашу задумку в игре. Даже если вы не можете найти, как сделать то, что вы придумали, можно реализовать это с помощью какой-то другой механики. Ну например, многие же знают про шикарное супер точное зеркал в Duke Nukem 3D, которые вместо реального отражения комнаты с главным героем, показывало их дубликаты, находившееся за стеной. Так вот, создание игры это создание иллюзий, обман игрока, и это ###### (очень круто).

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

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

"Если думаешь, что, загнав себя в ловушку, заставишь прекратить испытания, ты глубоко ошибаешься. Вот ещё один куб" (GLaDOS)

Когда мой куб научился ходить, то откидывая стены в космос, то проходя через них, было решено добавить в его жизнь кого-то, кто будет ходить с ним или пытаться расколоть его на части. После нескольких неудачных попыток создать ИСКУСТВЕННЫЙ ИНТЕЛЕКТ, я сдался и решил посмотреть, что может мне предложить Asset Store. Может быть это не совсем честно, но у меня серьезно не получалось сделать это самому, да и к тому же я ещё довольно продолжительное время разбирался с тем, как настроить уже готовый ассет пак.

Я нашёл довольно гибкий ассет позволяющий научить что угодно и ходить, и патрулировать заданную местность, и преследовать кого вам нужно, и много, много, много чего ещё. Просмотрев прилагающееся руководство, я начал оживлять другой куб, но он то не хотел идти, то, когда нужно было дойти до определенной точки, начинал ходить вокруг неё, то застревал на месте. Но когда куб-компаньон наконец-то начал выполнять то, что ему было сказано, я был доволен (на тот момент даже не думая про анимации) было принято решение заменить кубик на что-то похожее на человека. Открыв blender и почти сразу же закрыв его (не ну из шара сделать человека? Неее…) начал искать программу для моделирования людей, ну или чего-то подобного, чтобы как в каком-нибудь sims или saints row можно было подергать ползунки и получить ̶у̶р̶о̶д̶а̶ красавца. И такая нашлась! Называется Fuse. Подвигав ползунки получился вполне приличный, симпатичный, импозантный молодой человек.

Это я про него.
Это я про него.

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

Уверенная походка, уверенного в себе мужчины.
Уверенная походка, уверенного в себе мужчины.

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

Наверное, когда наш джентльмен начал ходить, не занимая своими полигонами всё доступное пространство, мне и пришла в голову идея сделать хоррор. Нужно было думать о том, в каком окружении мне придётся пугать маленьких школьников, но в голову ничего не приходило. Тогда я решил поделать какие-то модели для интерьера. До этого момента, я, как наверное уже понятно, пытался делать что-то в blender. Также по гайдам с YouTube можно многому научиться в 3D моделировании.

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

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

Потом я почему-то создал модель строительного прожектора, который вроде и никак нельзя впихнуть в школу, которую я выбрал в качестве места действия игры. Дальше у главного героя, появились очки здоровья, возможность бежать быстрее какое-то время. И вот тогда, я понял, что я Бог своего маленького мирка. Я могу сделать в нём абсолютно всё, что захочу. Приделать к школе локации с заброшенной стройки? Пожалуйста! Сделать возможность ускоряться в 10000 раз? Вот, нажмите на кнопку! Собирать старые часы, которые когда-то стояли у меня дома? А почему нет? И так во всём. Когда вы создаёте игру, вы сами решаете что и как в ней будет работать. Это прекрасно! А ещё одного из обитателей моего ужастика в файлах игры я назвал бранным словом, потому что заставить его нормально вести себя было той ещё мукой.  

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

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

Вскоре в игре появились несколько разных по своему поведению врагов, несколько разных локаций и так шаг за шагом моя школьная поделка  становилась похожей на настоящую игру. Всё, самое сложное осталось позади. Осталось самое простое - выпустить игру, подумал я, но как оказалось не так уже это и просто. Так вот, не долго думая, я полез в интернет с запросом "Как выпустить свою игру в google play?". И предвкушение того, что в ближайшие пару дней в google play появится страница с новым супер страшным хоррором куда-то улетучилось. 

А дальше я тебя не пущу...

Чтобы выложить свой шедевр в GP нужно создать аккаунт разработчика. Чтобы создать аккаунт разработчика нужно заплатить 25$. Чтобы заплатить 25$ нужна карта Visa или Master Card. Так как такие карты у нас, понятно почему, больше не выпускают, то с этим есть небольшая проблемка. Но так как у меня была ещё рабочая "визовская" карта, надежда, что GP её примет у меня оставалась. Как вы уже, наверное, догадались GP с моей картой послал меня в искать приюта в RUStore, но, каммон... вы серьёзно? И тут, на самом деле, есть два пути: либо вы оплачиваете аккаунта разработчика через сайты-посредники, либо простых людей из интернетов, которые предоставляют подобные услуги, и при этом не забываете заплатить сверх этих 25$ ещё и проценты за предоставляемые услуги, как по мне способ - так себе; либо, что более привлекательней, открываете список контактов в своём телефоне и ищете там либо дальних родственников, про которых вы слышали всего раз в жизни и живут где-то за границей, либо друзей и знакомых. Выбрав второй вариант, я связался со знакомым, который согласился мне помочь. Учитывая большую разницу в часовых поясах, мы общались по сообщению в день. Но спустя пару недель, желаемый статус разработчика был получен.

Но теперь то всё? Финишная прямая? А ### тебе!

Unity - гениален!

Хоть Unity и довольно простой для начинающего разработчика движок, что я понял и по своему опыту, и по тоне подобных отзывов, но в работе этой приблуды порой появляются необъяснимые аномалии, решения которых порой просто поражает. Например, при загрузки своего проекта в GP в виде aab. файла, Google вежливо говорит вам, что этот самый aab. файл должен соответствовать API уровню не ниже 31. Что это такое вообще? Я первый раз об этом слышу! Но решение оказалось довольно простым, нужно просто выставить нужный параметр в unity, и если у вас не установлены файлы с этим самым API 31, то Unity заботливо самостоятельно всё обновит. Да ведь? Нет! Обновление это просто не работает. Приходится самому делать это, через Android Studio. Ну ладно, это было не так уж и сложно. Но как-то в очередной раз "билдя" свою игру, что с тех пор происходило довольно гладко, Unity отказывался это делать, ссылаясь на ошибки, логи которых он вывел в консоль. Хм сколько же там ошибок? Ответ: 999+. Ошалев от такой цифры, я плюнул на это дело, и давясь огромным комом в горле, лёг спать.

Так это выглядит, только в описании ошибок текста в разы больше
Так это выглядит, только в описании ошибок текста в разы больше

На следующий день, решив повторить процесс, Unity рассказал, о наличии всего лишь четырёх ошибок. Что произошло за ночь, и куда делись остальные 999+ - неизвестно. Собравшись одолеть оставшиеся ошибки, я убил ещё часов 7 в поисках найти решение. Пришлось даже пробовать полное удаление движка и установка других его версий, как более старых, так и более новых. Но решением этой проблемы оказался всё тот же перезапуск Unity, и снятие одной галочки, которую по одному из гайдов я поставил. Чего бл#ть?

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

Но пройдя все преграды, я всё таки увидел, страницу своей игры в Google Play. 

В конце

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

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

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

И ещё, если вам понравилось моё сочинение, то можете поддержать меня, скачав мою игру. К тому же, если вы дочитали до конца, то, думаю, вам интересно, к какому результату можно прийти (но, конечно можно и гораздо лучше).

https://play.google.com/store/apps/details?id=com.EZStudio.CallOfDudeeNightmareHorror


Лучшие комментарии

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

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

— да как обойти эту ошибку !

— во, я обошел, но там другая вылазит.

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

Интересный стиль речи, было очень интересно прочитать и узнать что-то новое. Успехов автору и новых задумок ^^

А для совсем ленивых (или которые больше дезингеры, чем кодеры) есть конструкторы.

Классный блог было интересно почитать.
Помню, когда пару недель покопался в Unreal Engine 4, решил созвать друзей на разработку игры. К сожалению, ничего не получилось из-за нашей полной неопытности, однако это был интересный опыт.
Автору успехов в разработке игр.
P.S. Осталось немного наработок и сюжета. Если кому-то интересно, то могу выложить в виде блога.

Думая, было бы интересно

Читай также