Онлайн шутер на Unreal Engine 4 за 90 часов (видео создания + исходники)
Привет, харб! Примерно год назад я выкладывал статью о том, как я в прямом эфире создал выживалку за 150 часов. На этот раз хочу представить вам сетевой шутер, который я создал за 25 заходов по 3 — 4 часа. Всего вышло около 90 часов и в итоге мы создали онлайн шутер, в который сыграли вместе со зрителями.
Как и в прошлой серии, цель проекта — показать новичкам, как работать с сетью в 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: gitlab.com/Flakky/Stream-multiplayer-shooter
Исходники на ЯДиск: yadi.sk/d/8-Vn_QQ-3Smyqq
Сборка игры: yadi.sk/d/nC3FJjRV3Si8qP (сервер в папке MultiplayerShooter/Binaries/Win64)
Лицензия: creativecommons.org/licenses/by-sa/4.0/deed.ru
По планам дальше я хочу создать аркаду на С++, а за ней будет серия стримов по созданию RTS стратегии.
В группе по стримам вы сможете найти подробную информацию, записи стримов, а так же смотреть сами трансляции.