Привет, харб! Примерно год назад я выкладывал статью о том, как я в прямом эфире создал выживалку за 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
> Исходники на ЯДиск
> Сборка игры (сервер в папке MultiplayerShooter/Binaries/Win64)
> Лицензия

По планам дальше я хочу создать аркаду на С++, а за ней будет серия стримов по созданию RTS стратегии.

Комментарии (21)


  1. Shvonder
    28.02.2018 02:58

    Мужик, ты нереально крут! Спасибо за работу!


    1. Flakky Автор
      28.02.2018 11:36

      Всегда пожалуйста :)


  1. Tufed
    28.02.2018 11:06

    Мне кажется что сейчас самое молодое и актуальное направление «песочницы», и серия по созданию песочницы может очень хорошо быть принята аудиторией. Я вижу очень много проектов от инди разработчиков в этом жанре и почти все они собраны из ***на и палок на разных движках. Использование же Unreal Engine даст отличную платформу для подобных разработок. Жду с нетерпением серию про RTS стратегии. Надеюсь что ваши стримы помогут толковым и упертым энтузиастам, а те в свою очередь возродят этот жанр в том виде, который мы все так любим, и запилят что-нибудь действительно достойное.


    1. Flakky Автор
      28.02.2018 11:36

      Для новичков и стараемся, я тоже надеюсь :)


  1. rughost
    28.02.2018 11:21

    Кто интересуется, посмотрите еще у него стрим по сюрвайвал шутеру. Вообще этот канал —
    пожалуй лучший способ изучать движок на практике.
    Александр, очень жду от вас больше уроков по C++!


    1. Flakky Автор
      28.02.2018 11:39

      Рад стараться :)


  1. WHATrushka
    28.02.2018 11:35

    Офигеть! Просто колоссальный труд. Для меня очень удивительно видеть такого рода уроки в свободном доступе. Огромное вам уважение. Жаль, что узнал о вас только сейчас.


    1. Flakky Автор
      28.02.2018 11:37

      Смотрите на здоровье :)


  1. singletoon
    28.02.2018 11:35

    Афигеть! Спасибо тебе за проделанную работу.
    Таким как ты, нет цены!


    1. Flakky Автор
      28.02.2018 11:40

      Благодарю за добрые слова)


  1. KuarTo
    28.02.2018 11:35

    Спасибо за огромный труд! Оч жду аркаду на С++.


    1. Flakky Автор
      28.02.2018 11:39

      Будем ждать на стриме!


  1. HHHack
    28.02.2018 11:35

    На Unity бы так же показали, но все равно гляну, спасибо!


    1. Flakky Автор
      28.02.2018 11:38

      К сожалению с юнити не работаю, так что такие вещи не смогу там сделать. Да и мне анриала достаточно, на самом деле, в нем все необходимое есть, что есть и в юнити.


  1. nanshakov
    28.02.2018 11:55

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


    1. Flakky Автор
      28.02.2018 12:25

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


    1. QDeathNick
      28.02.2018 12:40

      А по мне, так современным играм не хватает именно качественного кода, выходят игры с графикой, дизайном, но при этом лагающие, глючащие, с непредсказуемым поведением.
      В Q3 или UT3 гораздо приятнее играть, чем в эти поделки дизайнеров. И не только мне, дети с удовольствием играют в старые, некрасивые, но качественные игры.


      1. Flakky Автор
        28.02.2018 14:35

        К сожалению это проблема не столько дизайнеров, как самих движков. Тот же Unreal Engine 4 устроен так, то бы на блупринтах можно было написать легко любую игру. А в редакторе материалов можно собрать любой шейдер без знания HLSL. Новички так и делают. И из-за такой легкости совсем не думаешь об оптимизации и о том, что все эти инструменты — ещё один уровень абстракции, который работает медленнее.

        Компании так же нанимают людей, которые вроде могут работать с движком, но о конкретике не задумаются: «О, этот парень сделал игру на анриале. Значит он нам подойдет.», но никто не спрашивает себя «Этот парень сделал игру, но сможет ли он оптимально решить нашу задачу?».

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


        1. Tufed
          28.02.2018 15:46

          Мне хватает того что на Unreal Engine собран ARK. Да, он требователен к ресурсам даже на минимальных настройках, но он красив на максимальных и очень играбелен на современном железе, его мир огромен, он разнообразен. Для такого проекта это круто. Да, я понимаю что это вдобавок еще заслуга целой армии разработчиков и оптимизаторов и целой тонны денег, которые в него вложили. И я вижу некоторые проекты, собранные на других движках, которые при том же железе дико лагают и тормозят даже на минимальных настройках и даже с минимальной дальностью отрисовки. Разница бросается в глаза сразу же.


  1. IvanProger07
    28.02.2018 23:03

    А можешь сделать что-то похожее только на Unity и на C#?


    1. Flakky Автор
      28.02.2018 23:04

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