Как и в прошлой серии, цель проекта — показать новичкам, как работать с сетью в UE4 на примере шутера. В стримах мы рассмотрели как организовывать связь между сервером и клиентами, где какая логика должна быть и выполняться, а так же рассмотрели разные побочные аспекты разработки, вроде создания карт, настройки анимаций и прочее.
Несмотря на чистое время, данный проект занял примерно 10 месяцев. Я делал большие перерывы в стримах, но тем не менее, закончил разработку и теперь он доступен всем бесплатно и без смс.
Если вас интересуют подробности, записи стримов, исходники или билд игры с сервером в комплекте, предлагаю прочитать дальше под катом!
В стримах мы рассмотрели почти весь процесс создания игры (за исключением её релиза). От планирования, до импорта и настройки графики и тестирования с реальными игроками. Тем не менее, из-за сжатых сроков, мы пропустили несколько важных моментов, например балансировку, прототипирования и ещё пару моментов.
Большая часть, конечно, ушла на логику игры. Изначально мы реализовали поведение персонажа, сделали менеджер и классы оружия, затем уже делали игровые режимы и раунды.
Почти весь проект написан на Блупринтах. Причины достаточно просты:
- Курс нацелен на новичков. В С++ им ориентироваться сложно, а так все более понятно.
- Нет смысла использовать С++, когда от него нет никаких преимуществ по производительности. Клиент работал стабильно и быстро. А сервер при 16-ти игроков занимал всего 1-2% от процессора ( домашний i7 4770). Да и вся логика событийно-ориентированная.
- При желании, можно включить нативизацию Блупринтов, что бы они конвертировались в C++. Благодаря этому разница между Блупринтами и С++ остается лишь в удобстве и возможностях, но не в производительности.
- Все, что нам нужно было, умеют Блупринты. Единственный раз, когда нужно было залезть в С++, это написать создание сессии. Конечно, это и Блупринты умеют, однако это нужно было из-за того, что бы работала Онлайн сабсистема и её мастер сервер, которую разработчик может присоединить (Например Steam)
Также мы поработали над графикой. На реалистичную или какую-то особую графику времени не было, поэтому мы сделали простую, мультяшную графику с обводкой. Оружие и персонажей оставили стандартные. Сделали даже две карты, что бы после завершения раунда у нас было голосование за следующую карту и, соответственно, сам переход.
- Основное управление персонажем
- Поддержка геймпада (тестировал на Xbox 360 Wireless Controller)
- Компонент жизней и брони
- Система бега и стамины
- Анимации персонажа от третьего и от первого лиц
Оружие
- Менеджер оружия (хранение, переключение, выбрасывание и т.д.)
- Класс оружия с логикой использования
- Ближнее оружие (Бита и нож)
- Огнестрельное оружие (Автомат, пистолет, авто-пистолет, дробовик, снайперка)
- Гранаты
- Спец оружие (Турель, мина)
- Поддержка второстепенного действия на ПКМ (например прицел у снайперки)
- Отдача и разброс у огнестрельного оружия
- Перезарядка и учет патрон у огнестрельного оружия
- Различные дополнительные настройки (Кол-во патрон, скорость использования)
Игровые режимы и раунды
- Основной игровой режим с базовой логикой (смерть, респаун)
- Deathmatch режим — «Каждый сам за себя»
- Командный режим
- Система раунда
- Лимиты раунда по очкам и по времени
- Ожидание игроков и отсчет начала раунда
- Конец раунда с голосованием за следующую карту
Контент
- Закрытая карта — Hangar
- Открытая карта — Warehouse
- Статичное освещение на сценах
- Различные модели, взятые из личных проектов или из демо-проектов Epic Games
- Звуки стрельбы и ходьбы
- Эффекты выстрела и дырки от пуль
Интерфейс пользователя
- Главный HUD с информацией о персонаже и оружии, а так же информации о раунде
- Миникарта
- Tab-меню со статистикой матча и игроков
- Чат
- Килл-чат (панель, где показываются недавние убийства)
- Окно пре-раунда со списком игроков и выбором команды
- Окно после раунда с результатами матча и голосованием за следующую карту
- Окно поиска сессий (без мастер-сервера работает ищет только LAN сервера)
- Главное меню с настройками и поиском. Оно же меню паузы
А вот и видеообзор всего, что мы сделали:
Конечно, на готовый продукт это не похоже, но я надеюсь, что свою работу проект выполнил. Мы рассмотрели очень много полезных вещей, использовали все основные возможности блупринтов по общению клиентов с сервером. В итоге мы собрали выделенный сервер и поиграли все вместе в командном режиме 8 на 8 игроков.
В дополнение хочу сказать, что вне стрима я собрал билд на андроид. Игра работала и подключалась к серверу нормально. Мы с другом смогли побегать вместе (он на телефоне, я на компе). Конечно управление мы не делали для сенсоров, но я все же хотел добавить этот факт в статью. Так что если вам нужен сессионный шутер для телефонов, welcome.
> Записи всех частей
- Планируем задачи и создаем проект. Создаем управление персонажа и начинаем делать вооружение.
- Добавляем новое оружие (в том числе холодное), переключение оружия и перезарядку.
- Делаем подбирание, переключение и выбрасывание оружия.
- Создаем базовый игровой режим, респаун игроков и спектатора при смерти. Делаем прожектайлы.
- Добавляем режим «Дедматч», создаем лимит раунда по времени или убийствам, делаем Tab-меню.
- Добавили минимальный интерфейс на HUD и на окно спектейтора. Исправляем некоторые баги.
- Создаем командный игровой режим.
- Создаем окно «До начала раунда» с таймером и окно «После конца раунда» со статистикой матча.
- Создаем выбор и автобалансировку команд. Так же начинаем работу над миникартой.
- Доделываем миникарту и создаем чат.
- Вспоминаем наш проект после двухмесячного перерыва. Создаем гранаты и мины.
- Делаем поддержку геймпада, приседания, бег со стаминой и турель.
- Собираем сервер, а так же делаем меню для поиска сессий и подключене. Добавили ожидание.
- Создаем голосование за следующую карту после раунда. Добавляем прототип ещё одной карты.
- Добавляем новое оружие, делаем разброс и отдачу. Рефакторим оружие под работу на клиенте.
- Дополняем логику стрельбы, добавляем эффекты. Также делаем прототип карты для игры по сети.
- Играем с подписчиками, фиксим разные баги с оружием и интерфейсом.
- Настраиваем анимации персонажей.
- Настраиваем анимации перезарядки. Так же исправляем различные другие ошибки.
- Создаем отверстия от выстрелов и след от них, а так же синхронизируем разброс.
- Создаем эффект получения урона и эффект нанесения урона у прицела.
- Исправляем различные ошибки в нашем проекте.
- Оформляем наш закрытый уровень, а так же создаем эффект постобрабоки с обводкой предметов.
- Оформляем наш второй, открытый уровень.
- Исправляем последние ошибки, добавляем звуки и играем со зрителями.
> Исходники на Git
> Исходники на ЯДиск
> Сборка игры (сервер в папке MultiplayerShooter/Binaries/Win64)
> Лицензия
По планам дальше я хочу создать аркаду на С++, а за ней будет серия стримов по созданию RTS стратегии.
Комментарии (21)
Tufed
28.02.2018 11:06Мне кажется что сейчас самое молодое и актуальное направление «песочницы», и серия по созданию песочницы может очень хорошо быть принята аудиторией. Я вижу очень много проектов от инди разработчиков в этом жанре и почти все они собраны из ***на и палок на разных движках. Использование же Unreal Engine даст отличную платформу для подобных разработок. Жду с нетерпением серию про RTS стратегии. Надеюсь что ваши стримы помогут толковым и упертым энтузиастам, а те в свою очередь возродят этот жанр в том виде, который мы все так любим, и запилят что-нибудь действительно достойное.
WHATrushka
28.02.2018 11:35Офигеть! Просто колоссальный труд. Для меня очень удивительно видеть такого рода уроки в свободном доступе. Огромное вам уважение. Жаль, что узнал о вас только сейчас.
nanshakov
28.02.2018 11:55Проблема в том, что к играм нужен дизайнер, графика и хоть какие то текстуры, а не просто код. эх. Спасибо, автор, буду смотреть ваши стримы. Огромная и интересная работа.
Flakky Автор
28.02.2018 12:25Да, вы правы. Тем не менее на стримах я стараюсь пару частей уделить именно графике (импорт, настройка, дизайн уровней). Например в этой серии мы сделали постобработку с обводкой, а так же задизайнили пару уровней.
QDeathNick
28.02.2018 12:40А по мне, так современным играм не хватает именно качественного кода, выходят игры с графикой, дизайном, но при этом лагающие, глючащие, с непредсказуемым поведением.
В Q3 или UT3 гораздо приятнее играть, чем в эти поделки дизайнеров. И не только мне, дети с удовольствием играют в старые, некрасивые, но качественные игры.Flakky Автор
28.02.2018 14:35К сожалению это проблема не столько дизайнеров, как самих движков. Тот же Unreal Engine 4 устроен так, то бы на блупринтах можно было написать легко любую игру. А в редакторе материалов можно собрать любой шейдер без знания HLSL. Новички так и делают. И из-за такой легкости совсем не думаешь об оптимизации и о том, что все эти инструменты — ещё один уровень абстракции, который работает медленнее.
Компании так же нанимают людей, которые вроде могут работать с движком, но о конкретике не задумаются: «О, этот парень сделал игру на анриале. Значит он нам подойдет.», но никто не спрашивает себя «Этот парень сделал игру, но сможет ли он оптимально решить нашу задачу?».
Но все это с опытом приходит, если есть интерес… Благо, те же блупринты хоть и медленные, но позволяют писать достаточно грамотный и быстрый код. То же самое и с материалами.Tufed
28.02.2018 15:46Мне хватает того что на Unreal Engine собран ARK. Да, он требователен к ресурсам даже на минимальных настройках, но он красив на максимальных и очень играбелен на современном железе, его мир огромен, он разнообразен. Для такого проекта это круто. Да, я понимаю что это вдобавок еще заслуга целой армии разработчиков и оптимизаторов и целой тонны денег, которые в него вложили. И я вижу некоторые проекты, собранные на других движках, которые при том же железе дико лагают и тормозят даже на минимальных настройках и даже с минимальной дальностью отрисовки. Разница бросается в глаза сразу же.
IvanProger07
28.02.2018 23:03А можешь сделать что-то похожее только на Unity и на C#?
Flakky Автор
28.02.2018 23:04К сожалению нет. С юнити не работаю. Да и я уверен, что по юнити полно уроков и демок, подобно моим. Все же он куда дольше был популярным, чем анриал.
Shvonder
Мужик, ты нереально крут! Спасибо за работу!
Flakky Автор
Всегда пожалуйста :)