«Сделал прототип шутера с мультиплеером и ядерными взрывами»

«Сделал прототип шутера с мультиплеером и ядерными взрывами»

Алексей Козлов — о своей первой игре на Unity, сборе команды разработки и будущих проектах
8 минут2279

Привет! Меня зовут Алексей, мне 13 лет. В апреле 2020 года я окончил детский курс разработки игр в GeekSchool и сделал прототип игры о нелёгкой службе в полиции. Расскажу, как проходила учёба, что радовало и печалило, какие трудности вставали на пути и как после курсов я собрал свою команду для работы над следующей игрой. 

Как я познакомился с геймдевом

До GeekBrains я пробовал изучать разработку игр самостоятельно и на офлайн-курсах. 

Мы с моим лучшим другом Антоном придумывали игру мечты: её сюжет, геймплей и так далее. Наверное, все проходят этап, когда замыслы ещё трудно соотнести с возможностями. Мы хотели сделать разрушаемое игровое пространство, поселить в нём по-настоящему умных и опасных врагов и отрисовать всё это в реалистичной современной 3D-графике. Но опыт показал, что нам было ещё далеко до создания больших и сложных проектов. Кроме того, стало ясно: даже будь у нас ресурсы и знания для реализации задуманного, наша игра мечты предъявляла бы нереально высокие требования к «железу».

Сначала я пробовал известные игровые движки, в том числе Unity 3D, CryEngine 3 и Unreal Engine 4. На тот момент самым удобным и простым мне показался именно CE — в нём были заготовки кода для управления протагонистом, библиотека моделей и даже базовый ИИ врага. На этом движке я впервые попробовал сделать простенький шутер от первого лица. Там не было ни глубокой идеи, ни оригинальных механик, но я использовал эту работу в качестве школьного проекта.

Дальше где-то полтора месяца я ходил в школу кодинга «Кодабра» у нас в Екатеринбурге. Сначала на демоуроке мы собрали игрушку на Unity из готовых ассетов. Дальше было полтора месяца занятий, на которых я мало что понимал, но всё-таки сделал проект про катящийся шарик. А главное, я убедился, что мне интересен движок Unity и геймдев в целом.

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

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

Что мы делали в GeekSchool

В прошлом году я случайно увидел на YouTube рекламу курса GeekBrains по разработке игр. Заинтересовался, глянул программу обучения, но она показалась слишком сложной. Тогда я обратился в чат поддержки сайта GeekBrains, чтобы уточнить, есть ли альтернативы. Консультант ответил, что кроме факультета для взрослых есть ещё курс для детей. Описание мне понравилось, так что я попросил родителей оплатить обучение.

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

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

Надо сказать, что по Unity в интернете очень много информации, поэтому я не только смотрел лекции, но и постоянно гуглил советы и рецепты, как сделать ту или иную вещь. Улучшения для игры я в основном тоже придумывал сам. Новые «фишечки», которые удавалось внедрить, прежде всего давал тестировать друзьям. 

Особых трудностей по ходу учёбы у меня не возникало, если не считать того, что сама среда разработки Unity 3D постоянно вылетала и тупила. То ли это было вызвано багами, из-за которых движок конфликтовал с моим «железом», то ли я недостаточно оптимизировал код проекта. Не знаю. В любом случае меня это не остановило.

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

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

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

Моя игра The Police Is и её доработка

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

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

Неполный список версий, которые появлялись в процессе работы

В игре три уровня: «Москва», «Нью-Йорк» и «Кошмарный сон». Это просто названия карт, по сути же действие происходит на улице какого-то условного города. На каждом уровне — по три улики, которые надо успеть найти за 40 секунд. Карты маленькие, и ограничение по времени делает прохождение более динамичным.

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

Поскольку одиночную игру можно пройти за две минуты, мне захотелось добавить мультиплеер. Реализация первого рабочего прототипа мультиплеера заняла у меня не более 20 минут. Сделан он был на основе бесплатной технологии PUN 2 (Photon Unity Networking). Но первый же тест выявил сразу несколько серьёзных недочётов.

  • Не работали анимации. Модельки просто стояли в T-позе. Дело в том, что по умолчанию анимации в Photon не синхронизируются. Бесплатная версия PUN позволяет одновременно собирать в одной комнате до 20 игроков, а платная на 100 человек стоит 100 $.
  • Не было списка игроков, так что было непонятно, кто подключился.
  • Не хватало игроков и тестеров — участвовали только мои друзья. Многие люди пришли позже, на альфа-тестирование следующей версии.

Я сосредоточился на ручном допиливании мультиплеера, и вскоре все перечисленные проблемы были решены.

The Police Is 2

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

На открытом альфа-тесте мы взорвали пару ядерных бомб и проверили мультиплеер на прочность. Затем я уже один записал это короткое видео

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

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

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

Вот такое сообщение появляется в меню, если версии не совпадают

Если говорить о ресурсах к игре, в основном я брал готовые ассеты из магазина Unity, но некоторые модели сделали мои знакомые 3D-художники на заказ. Уже упомянутый выше Антон познакомил меня со своим приятелем, а тот умел работать с профессиональным редактором анимации Cinema 4D. В итоге этот человек стал у нас главным моделистом.

Впечатления от учёбы

Реальность оказалась даже круче ожиданий. Если сравнить мои сегодняшние навыки с тем, что я знал и умел раньше, — прогресс очень заметен. Да, я всё ещё начинающий, но раньше мой уровень можно было назвать отрицательным :) Я вошёл во вкус Unity-разработки, сделал первую игру, в которую можно играть с друзьями. Сейчас прохожу углублённый курс по C#, чтобы создавать более сложный код. 

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

Сейчас мы с единомышленниками на энтузиазме собрали свою маленькую игровую студию Aisu и делаем новую игру. Всё началось с друзей и друзей друзей, а позже к нам стали присоединяться люди со стороны. Игрушка называется Virus Game. По сути это аркада с оригинальным сюжетом про компьютерный вирус. По внешнему виду — это 2D, которое плавно искажается и переходит в 3D. Пока проект на ранней стадии разработки. Сейчас мы в поиске нового сценариста — сюжет предстоит наполнить подробностями.

Что касается старых проектов, они ещё пригодятся. The Police Is 2 я собираюсь использовать в качестве подопытного кролика. В далёком будущем, если будут ресурсы, я хотел бы сделать ремейк этого проекта. А пока мы полностью сфокусированы на «Вирусах».

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

Сентябрь — отличное время, чтобы построить далеко идущие планы и начать идти к новым целям! Если вы хотите освоить профессию мечты, то с 1 по 11 сентября 2020 г. мы дарим вам скидку 40% почти на все программы обучения GeekBrains. Успехов! :)

 

программированиеистории успеха
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup