Онлайн шутер на 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
    Исходники на ЯДиск
    Сборка игры (сервер в папке MultiplayerShooter/Binaries/Win64)
    Лицензия

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

    Ну. И что?
    Реклама
    Комментарии 27
    • 0
      Мужик, ты нереально крут! Спасибо за работу!
      • 0
        Всегда пожалуйста :)
      • 0
        Мне кажется что сейчас самое молодое и актуальное направление «песочницы», и серия по созданию песочницы может очень хорошо быть принята аудиторией. Я вижу очень много проектов от инди разработчиков в этом жанре и почти все они собраны из ***на и палок на разных движках. Использование же Unreal Engine даст отличную платформу для подобных разработок. Жду с нетерпением серию про RTS стратегии. Надеюсь что ваши стримы помогут толковым и упертым энтузиастам, а те в свою очередь возродят этот жанр в том виде, который мы все так любим, и запилят что-нибудь действительно достойное.
        • 0
          Для новичков и стараемся, я тоже надеюсь :)
        • 0
          Кто интересуется, посмотрите еще у него стрим по сюрвайвал шутеру. Вообще этот канал —
          пожалуй лучший способ изучать движок на практике.
          Александр, очень жду от вас больше уроков по C++!
        • 0

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

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

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

              • 0
                Будем ждать на стриме!
              • +1
                На Unity бы так же показали, но все равно гляну, спасибо!
                • 0
                  К сожалению с юнити не работаю, так что такие вещи не смогу там сделать. Да и мне анриала достаточно, на самом деле, в нем все необходимое есть, что есть и в юнити.
                • 0
                  Проблема в том, что к играм нужен дизайнер, графика и хоть какие то текстуры, а не просто код. эх. Спасибо, автор, буду смотреть ваши стримы. Огромная и интересная работа.
                  • 0
                    Да, вы правы. Тем не менее на стримах я стараюсь пару частей уделить именно графике (импорт, настройка, дизайн уровней). Например в этой серии мы сделали постобработку с обводкой, а так же задизайнили пару уровней.
                    • +1
                      А по мне, так современным играм не хватает именно качественного кода, выходят игры с графикой, дизайном, но при этом лагающие, глючащие, с непредсказуемым поведением.
                      В Q3 или UT3 гораздо приятнее играть, чем в эти поделки дизайнеров. И не только мне, дети с удовольствием играют в старые, некрасивые, но качественные игры.
                      • 0
                        К сожалению это проблема не столько дизайнеров, как самих движков. Тот же Unreal Engine 4 устроен так, то бы на блупринтах можно было написать легко любую игру. А в редакторе материалов можно собрать любой шейдер без знания HLSL. Новички так и делают. И из-за такой легкости совсем не думаешь об оптимизации и о том, что все эти инструменты — ещё один уровень абстракции, который работает медленнее.

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

                        Но все это с опытом приходит, если есть интерес… Благо, те же блупринты хоть и медленные, но позволяют писать достаточно грамотный и быстрый код. То же самое и с материалами.
                        • –1
                          Мне хватает того что на Unreal Engine собран ARK. Да, он требователен к ресурсам даже на минимальных настройках, но он красив на максимальных и очень играбелен на современном железе, его мир огромен, он разнообразен. Для такого проекта это круто. Да, я понимаю что это вдобавок еще заслуга целой армии разработчиков и оптимизаторов и целой тонны денег, которые в него вложили. И я вижу некоторые проекты, собранные на других движках, которые при том же железе дико лагают и тормозят даже на минимальных настройках и даже с минимальной дальностью отрисовки. Разница бросается в глаза сразу же.
                    • 0
                      А можешь сделать что-то похожее только на Unity и на C#?
                      • 0
                        К сожалению нет. С юнити не работаю. Да и я уверен, что по юнити полно уроков и демок, подобно моим. Все же он куда дольше был популярным, чем анриал.
                      • 0
                        Мужик, ты просто ТОП.
                        Жду RTS на С++.
                        Спасибо!
                        • 0
                          Спасибо!

                          Однако стратегия будет на Блупринтах. На С++ у нас сейчас идет серия по аркаде.
                        • 0
                          Вы не могли бы выложить билд куда-нибудь еще кроме Я.Диска,
                          а заодно и сборку предыдущего проекта?
                          Никак не получается скачать.
                          • 0
                            Пользуюсь только Ядиском, к сожалению( Попробуйте скачать с гита проект и собрать. Да и вообще сам билд вроде ничему не научит, исходники полезнее :)
                          • 0
                            Смотрел ваши стримы по этому экшену. Ещё раз говорю спасибо — действительно очень хороший материал, а для незнающих английский — отличная замена официальным стримам по UE.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое