Онлайн шутер на Unreal Engine 4 за 90 часов (видео создания + исходники)

Привет, харб! Примерно год назад я выкладывал статью о том, как я в прямом эфире создал выживалку за 150 часов. На этот раз хочу представить вам сетевой шутер, который я создал за 25 заходов по 3 — 4 часа. Всего вышло около 90 часов и в итоге мы создали онлайн шутер, в который сыграли вместе со зрителями.

image

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

Несмотря на чистое время, данный проект занял примерно 10 месяцев. Я делал большие перерывы в стримах, но тем не менее, закончил разработку и теперь он доступен всем бесплатно и без смс.
Если вас интересуют подробности, записи стримов, исходники или билд игры с сервером в комплекте, предлагаю прочитать дальше под катом!

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

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

Почти весь проект написан на Блупринтах. Причины достаточно просты:

  • Курс нацелен на новичков. В С++ им ориентироваться сложно, а так все более понятно.
  • Нет смысла использовать С++, когда от него нет никаких преимуществ по производительности. Клиент работал стабильно и быстро. А сервер при 16-ти игроков занимал всего 1–2% от процессора (домашний i7 4770). Да и вся логика событийно-ориентированная.
  • При желании, можно включить нативизацию Блупринтов, что бы они конвертировались в C++. Благодаря этому разница между Блупринтами и С++ остается лишь в удобстве и возможностях, но не в производительности.
  • Все, что нам нужно было, умеют Блупринты. Единственный раз, когда нужно было залезть в С++, это написать создание сессии. Конечно, это и Блупринты умеют, однако это нужно было из-за того, что бы работала Онлайн сабсистема и её мастер сервер, которую разработчик может присоединить (Например Steam)

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

Список всего, что мы реализовали за эти 90 часов
Персонаж
  • Основное управление персонажем
  • Поддержка геймпада (тестировал на Xbox 360 Wireless Controller)
  • Компонент жизней и брони
  • Система бега и стамины
  • Анимации персонажа от третьего и от первого лиц

Оружие
  • Менеджер оружия (хранение, переключение, выбрасывание и т.д.)
  • Класс оружия с логикой использования
  • Ближнее оружие (Бита и нож)
  • Огнестрельное оружие (Автомат, пистолет, авто-пистолет, дробовик, снайперка)
  • Гранаты
  • Спец оружие (Турель, мина)
  • Поддержка второстепенного действия на ПКМ (например прицел у снайперки)
  • Отдача и разброс у огнестрельного оружия
  • Перезарядка и учет патрон у огнестрельного оружия
  • Различные дополнительные настройки (Кол-во патрон, скорость использования)

Игровые режимы и раунды
  • Основной игровой режим с базовой логикой (смерть, респаун)
  • Deathmatch режим — «Каждый сам за себя»
  • Командный режим
  • Система раунда
  • Лимиты раунда по очкам и по времени
  • Ожидание игроков и отсчет начала раунда
  • Конец раунда с голосованием за следующую карту

Контент
  • Закрытая карта — Hangar
  • Открытая карта — Warehouse
  • Статичное освещение на сценах
  • Различные модели, взятые из личных проектов или из демо-проектов Epic Games
  • Звуки стрельбы и ходьбы
  • Эффекты выстрела и дырки от пуль

Интерфейс пользователя
  • Главный HUD с информацией о персонаже и оружии, а так же информации о раунде
  • Миникарта
  • Tab-меню со статистикой матча и игроков
  • Чат
  • Килл-чат (панель, где показываются недавние убийства)
  • Окно пре-раунда со списком игроков и выбором команды
  • Окно после раунда с результатами матча и голосованием за следующую карту
  • Окно поиска сессий (без мастер-сервера работает ищет только LAN сервера)
  • Главное меню с настройками и поиском. Оно же меню паузы


А вот и видеообзор всего, что мы сделали

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

В дополнение хочу сказать, что вне стрима я собрал билд на андроид. Игра работала и подключалась к серверу нормально. Мы с другом смогли побегать вместе (он на телефоне, я на компе). Конечно управление мы не делали для сенсоров, но я все же хотел добавить этот факт в статью. Так что если вам нужен сессионный шутер для телефонов, welcome.

Записи всех частей

Содержание частей
  1. Планируем задачи и создаем проект. Создаем управление персонажа и начинаем делать вооружение.
  2. Добавляем новое оружие (в том числе холодное), переключение оружия и перезарядку.
  3. Делаем подбирание, переключение и выбрасывание оружия.
  4. Создаем базовый игровой режим, респаун игроков и спектатора при смерти. Делаем прожектайлы.
  5. Добавляем режим «Дедматч», создаем лимит раунда по времени или убийствам, делаем Tab-меню.
  6. Добавили минимальный интерфейс на HUD и на окно спектейтора. Исправляем некоторые баги.
  7. Создаем командный игровой режим.
  8. Создаем окно «До начала раунда» с таймером и окно «После конца раунда» со статистикой матча.
  9. Создаем выбор и автобалансировку команд. Так же начинаем работу над миникартой.
  10. Доделываем миникарту и создаем чат.
  11. Вспоминаем наш проект после двухмесячного перерыва. Создаем гранаты и мины.
  12. Делаем поддержку геймпада, приседания, бег со стаминой и турель.
  13. Собираем сервер, а так же делаем меню для поиска сессий и подключене. Добавили ожидание.
  14. Создаем голосование за следующую карту после раунда. Добавляем прототип ещё одной карты.
  15. Добавляем новое оружие, делаем разброс и отдачу. Рефакторим оружие под работу на клиенте.
  16. Дополняем логику стрельбы, добавляем эффекты. Также делаем прототип карты для игры по сети.
  17. Играем с подписчиками, фиксим разные баги с оружием и интерфейсом.
  18. Настраиваем анимации персонажей.
  19. Настраиваем анимации перезарядки. Так же исправляем различные другие ошибки.
  20. Создаем отверстия от выстрелов и след от них, а так же синхронизируем разброс.
  21. Создаем эффект получения урона и эффект нанесения урона у прицела.
  22. Исправляем различные ошибки в нашем проекте.
  23. Оформляем наш закрытый уровень, а так же создаем эффект постобрабоки с обводкой предметов.
  24. Оформляем наш второй, открытый уровень.
  25. Исправляем последние ошибки, добавляем звуки и играем со зрителями.

Исходники на 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 стратегии.
В группе по стримам вы сможете найти подробную информацию, записи стримов, а так же смотреть сами трансляции.

© Habrahabr.ru