Как сделать файтинг в unreal engine 4

Обновлено: 07.07.2024

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

Поиск. Поиск. Поиск.

И вот он, движок моей мечты!

Сначала он распространялся по подписке, что не остановило меня. И как оказывается - не зря. Движок сразу мне понравился - простота и интуитивность интерфейса в сочетании с системой визуального скриптинга Blueprint. Так же наличие мощных инструментов для работы с анимацией, звуком и визуальной составляющей, и это далеко не весь список - внушали уважение к создателям этого чуда EpicGames. И что совсем радовало, так это поддержка комьюнити. Огромное количество модераторов, да и члены постоянно растущего сообщества каждый день делятся идеями, способами реализации и контентом для движка. Но как говорится чем глубже в лес тем. В общем с момента моего первого знакомства и до начала реализации моей идеи по созданию проекта прошло в общей сложности почти 3 года, за которые я освоил функционал движка и инструментов, которые понадобятся в процессе разработки. Конечно сейчас этот срок можно было бы и "скостить" и до года, благо с тех первых дней количество уроков, документации, видео и другого обучающего контента увеличилось в разы, а таким как я приходилось практически "методом тыка" изучать функции и приёмы работы с движком.


Интерфейс редактора визульного скриптинга:

"Так о чём же статья?" - наверняка спросит читатель. А она о том, что пройдя такой путь, от идеи и до практической реализации я не жалею ни потраченного времени, ни сил. И поэтому если кто-то вдруг имеет такие же мысли, как и у меня в те времена - дерзайте! Нет никаких преград, а я лишь могу пожелать вам терпения в учении.

Ещё не игра, но уже и не просто задумка.

И собственно, для чего я потратил столько сил и времени, воплощается в жизнь. С момента выхода первой части Mass Effect я мечтал об онлайновой игре, или хоты бы кооперативной. Но этого не произошло, а значит пришлось делать самому. В течении двух месяцев упорной работы были созданы инструменты для использования ресурсов оригинальной трилогии. Да, это не даёт мне право использовать игру в коммерческих целях, но и не в деньгах интерес! Затем был собран изменённый Mass Effect Explorer, с помощью которого я смог "вытащить" координаты объектов (локации) в понятном UE4 формате. После шёл долгий этап адаптации материалов оригинала под использование с технологией BPR (физически корректный рендеринг и шейдинг), который используется в UE4 и которого не было в Mass Effect 1-3. Это дало удивительные графические результаты, хотя требования к ПК существенно возросли. Далее углубляться в технические моменты не буду, но расскажу и покажу что есть на данный момент. А именно: сервер на 128 игроков, с сохранением прогресса (инвентарь, положение, регистрационные данные), несколько видов оружия (биотика пока не реализована), наземной и воздушной техники, которая поддерживает передвижение группой до 4-х игроков. Из доступных рас пока только люди. Из доступных локаций - Иден Прайм (расширенный), Луна, Марс (расширенный), Цитадель (полная, без загрузок), Илос (расширенный). В данный момент ведётся работа над Омегой, которая так же будет расширена. Так же есть пока не сильно функциональный редактор персонажа. В общем почти всё готово к первому тесту, сейчас заканчиваем тестирование сети, авторизация в игре происходит через Steam (достаточно иметь просто запущенный клиент) с помощью тестового id 480 (знающие поймут что это, простым же игрокам это не нужно). Ну вот и всё, напоследок оставлю несколько скриншотов:


Логотип запуска:


Редактор персонажа:


И кибернетика, как же без неё!


Хоть загрузок нет. но лифты остались!


Ну вот, прибыли в клуб:


И он же внутри:


Пип-Бой Инструментрон и Авина подскажут куда дальше:


Голограммы и рекламные билборды:


Вид из одного из помещений:


Небо! Почти как на Земле!

Представляем вам видео курс по изучению движка Unreal Engine 4. За курс вы научитесь работать с интерфейсом движка, а также изучите построение простых игр на основе Unreal Engine.

Видеоурок

Особенности Unreal Engine 4

Unreal Engine является одним из мощнейших игровых движков. Он предназначен для построения хорошо визуализированных игр под ПК и различного рода приставок. Также на нём можно создавать приложения под мобильные устройства и VR. Что касается написания скриптов, то в движке используется язык программирования C++ .

Игровой движок Unreal Engine является профессиональным инструментом для разработки полноценных 2D и 3D проектов. При разработке игр на Unreal Engine вы сходу получаете набор отличной графики и настроек дизайна, а также хорошо оптимизированный код чтобы игры запускались без торможения.

Ниже приведено несколько крупных игр, которые были созданы при помощи движка:

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

Игровой движок создает максимально реалистичные картинки игрового процесса. В играх созданных на Unreal Engine имеется отлично проработанная физика объектов в частности деревьев, ветра, воды и многого другого.

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

В отличии от Unity движок Unreal больше предназначен для крупных проектов, хотя небольшие красивые инди игры также можно создавать.

План курса

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

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

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


Меня зовут Игорь Титаренко , я работаю Unreal Engine разработчиком в компании SolidCore Games . Свежий пример, который я хочу с вами рассмотреть — прототип раннера. По этой ссылке вы можете скачать файлы проекта и потестить его.

В готовом прототипе будет:

Персонаж бегущий вперед, на кнопки “A”, “D” меняем локейшн по оси “ X ”.


Уровень, по которому мы передвигаемся — Tile Map. При перемещении персонажа, пройденный тайл перемещается вперед.


Монеты, которые мы будем собирать, и подсчет очков.


Простой UI (Game Over, Score, Restart) и к онец игры при столкновении с препятствием.


Ассеты я подготовил заранее и буду подгружать из готового проекта. Логику напишу с нуля.

Создание проекта и настройка персонажа

Создадим проект на основе Third Person, в котором у нас по умолчанию будет персонаж и уровень.


Я убираю из уровня лишнюю геометрию и настраиваю персонажу управление. Изначально, при нажатии на “W” вызывается событие MoveForward и персонаж передвигается вперед. Мы будем вызывать логику движения вперед не нажатием кнопки, а на Event Tick, то есть на каждый кадр в игре, чтобы персонаж все время бежал вперед.


Затем настраиваем перемещение персонажа на кнопки “A”, “D” — меняем локейшн по оси X .


Создаем массив float переменных, в котором будем хранить значения локации по оси X каждой из трех “дорожек”, по которым бежит персонаж.


Далее проверяем по какой полосе мы бежим — 0, 1 или 2, затем на нажатие кнопок “A”, “D” добавляем или отнимаем индекс полосы, если он не выходит за минимальное и максимальное значение.


После этого, в зависимости от индекса полосы дороги, задаем координаты по оси Х для нашего персонажа.


Tile Map

Начнем с подготовки ассетов для генерации уровня. Нам понадобится:

  1. Машинки, которые мы будем расставлять по уровню.
  2. Монетки, которые мы будем собирать.
  3. Tile — blueprint actor с наполнением уровня. Из тайлов мы будем генерировать “коридор” нашего уровня.


BP_Car

Теперь сделаем машинки, которые будут спауниться на уровне. Чтобы разнообразить игру, будем генерировать случайную машину из массива возможных вариантов. Создаем новый blueprint actor, добавляем ему компонент Static Mesh. Создаем массив с вариантами геометрии для наших машин. Далее пишем логику, которая при создании машинки будет генерировать рандомное (в пределах массива) число — индекс, и по нему задавать нашему эктору геометрию из массива.


BP_Coin

У каждого отдельного тайла на каждой полосе дороги в случайном месте по оси Y спаунится машинка, и на случайной полосе спаунится группа монет.


Чтобы геометрия монет и машинок не пересекалась, мы будем спаунить монеты выше, чтобы они падали на карту. При столкновении с машинкой или дорогой отключим им физику. Таким образом монеты будут на одинаковой высоте и над асфальтом и над машинками, в тех местах где они есть. Здесь они у меня на неравном расстоянии друг от друга, но на то он и прототип, чтобы быстро передать принцип без длительной проработки.


Создаем blueprint actor, добавляем ему компонент геометрии и коллизию, которая будет отвечать за отключение физики при столкновении с поверхностью.


По умолчанию сделаем наш actor физическим объектом, чтобы включить гравитацию. Для этого поставим галочку physics enabled. Далее добавим логику отключения физики, когда она нам больше не нужна.


Сделаем так, чтобы монетка все время вращалась.


BP_Tile

Создаем тайл, из которого будет генерироваться уровень, по которому будет бежать персонаж. Я создаю новый Blueprint actor, добавляю ему нужные нам компоненты:

  1. StaticMesh — геометрию зданий и окружение.
  2. Box Collision “SpawnPoint Box” коллизию которая будет отрабатывать событие, когда персонаж пробежит данный тайл. Это необходимо, чтобы мы могли вызвать логику уничтожения данного тайла и спауна нового впереди.
  3. Spawn point — точку координат, в которой мы будем спаунить новый тайл.

Далее пишем функции генерации машин. Логика здесь такая — получаем локейшн тайла и в случайном месте из заданного диапазона по оси Y спауним BP_Car.


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


На событие начала игры вызываем функции спауна машин, по одной для каждой полосы движения, и на случайной полосе спауним монеты.


Теперь в GameMode напишем логику генерации уровня. Класс GameMode отвечает за настройку правил игры. Правила могут включать в себя любое поведение, связанное с игрой. Например, условия выигрыша или, как в нашем случае, генерацию тайл мапа. Функция спауна тайлов будет выглядеть так:


Спауним первый тайл в нулевых координатах, которые записаны в переменную NextSpawnPoint. После этого вытаскиваем локейшн у его Spawn Point. Получаем координаты этой точки и записываем их в переменную NextSpawnPoint — эти координаты будут использованы для следующего тайла. Вызываем функцию еще раз, чтобы заспаунить следующий тайл. В Game Mode на Event Begin Play создадим цикл, который будет вызывать спаун тайлов нужное нам количество раз.


Начало игры запускает цикл. Он проходит от нуля до пяти. То есть функция Spawn Tile вызывается шесть раз. Соответственно, в начале игры спаунится шесть тайлов.

Если сейчас запустить игру, сгенерируется наш tile map, но мы можем пробежать его от начала до конца. Напишем логику для real time генерации тайлов при перемещении по уровню. В BP_Tile добавляем к SpawnPoint Box событие On Component Begin Overlap. Оно будет срабатывать, когда бокс компонент пересечется с другим объектом игрового мира, у которого есть коллизия. Событие проверяет, что столкнулось с SpawnPointBox. Если это character, которым мы управляем, то вызываем из Game Mode функцию спауна нового тайла и после задержки удаляем пройденный тайл.


UI, Подсчет очков

Создадим Widget Blueprint и назовем его WBP_Point.


Добавим в наш виджет следующие текстовые виджеты:

  • Score
  • GameOver
  • Your Score
  • Total Score

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


Visibility всех элементов виджета кроме Score устанавливаем Hiden и д обавляем кнопку Restart, на нажатие которой заново будет открываться наш уровень.



В целом наш виджет должен выглядеть примерно так:


Перейдем в Graph и создадим переменную “Score” типа integer — целое число. Для текстов Score и Total Score привяжем созданную интовую переменную в качестве значения. Теперь из переменной зададим значение в текст, а переменную, в свою очередь, будем менять в персонаже.



Теперь добавим наш виджет во вьюпорт. Для этого в ThirdPersonCharacter на Event Begin Play создадим виджет WBP_Points, добавим его во вьюпорт и сохраним ссылку на него в переменную “Widget Score”.


Теперь у нас есть практически все для того, чтобы собирать монетки. Создадим в ThirdPersonCharacter событие PickupPoints. При вызове события получаем значение переменной Score из ссылки на виджет Widget Score, добавляем к нему 5 очков и обратно записываем в переменную Score.


PickupPoints будем вызывать из BP_Coin. Добавим событие On Component Begin Overlap для static mesh, в котором проверим с чем пересекается монетка. Если это ThirdPersonCharacter, вызываем у него PickupPoints и уничтожаем монетку.


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

Далее создадим логику конца игры, которая будет вызываться на столкновение персонажа с машиной. Для этого создаем в WBP_Points функцию Game Over, в которой будем менять visibility текстовых виджетов Game Over, Total Score, Restart button.


Добавим отдельный Box Collision component в ThirdPersonCharacter.


Привяжем событие на столкновение с этим боксом, в котором мы проверим: если ThirdPersonCharacter сталкивается с BP_Car, то вызываем функцию Game Over из WBP_Points, которая отрисует нужный нам интерфейс. Далее отключаем движения персонажу и включаем отображение курсора мыши, чтобы иметь возможность нажать Restart.


Теперь, если врезаться в машинку, мы получим такой результат:


Привет, меня зовут Алексей, я работаю в компании Pingle Game Studio на должности Head of Division харьковского департамента. Свою деятельность я начал в 1996 году, и она всегда была связана с видеоиграми. Помимо этого, я создавал видеоролики и всевозможные шоу для телевидения, кино и для научных разработок.

В этой статье я расскажу вам, какие новые потрясающие инструменты предоставляет Unreal Engine 4, позволяющие сделать клип или визуальную сцену настолько быстро и просто, как никогда раньше.

Моя статья про Unreal будет интересна как профессионалам, так и новичкам, которые хотят заниматься синематиками на этом движке.

Инструменты Unreal Engine 4

У Unreal Engine 4 появились свои особенности, благодаря которым работать с этим движком стало хоть и по-другому, но значительно проще.

И если человек раньше работал на телевидении или в постпродакшне и познакомился с Unreal, то он может превратиться либо в Cinematic Artist, либо в Technical Artist — обе позиции очень востребованы в ІТ-компаниях.

Landscape

Unreal Engine 4

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

Затем, после интеграции в Unreal, сам движок нам предлагает инструменты для скульптинга и рисования, чтобы дополнить их тонкими деталями локации на большом сгенерированном ландшафте.

Unreal Engine 4


У инструмента от Unreal есть своя особенность, которая делает LOD Level of Detail (уровень детализации) или Level of Development (уровень проработки модели) автоматически на разных дистанциях. Благодаря этому Landscape предоставляет огромный выигрыш по скорости обработки сцены.

Unreal превосходно справляется с рендером как небольших локаций (до 4 х 4 км), так больших (28 х 28 км и даже больше) — все объекты на нем подгружаются очень быстро.

Foliage

Unreal Engine 4

В Foliage можно даже анимировать объекты на уровне шейдеров. При этом такая высокая скорость реакции, как в Unreal, не встречается больше нигде.

Приоритетность LOD

Unreal Engine 4

Unreal Engine 4

Раньше нужно было рисовать их по отдельности. Unreal позволяет просто кисточкой обвести площадь на карте, а движок сам добавит всех персонажей самостоятельно. Мне остается только задать точку, куда они должны двигаться — и все.

В 2015 году мы тратили около трех дней на рендер лишь одного кадра с 15-тысячной толпой — это делала связка из 16-ти мощных компьютеров. В 2021 году возможности Unreal позволяют обработать всю сцену всего за пять минут на одном компьютере.

Quixel Bridge


Я крайне рекомендую использовать библиотеку Quixel Bridge. Правда, она доступна только для пользователей Epic Games Store, но регистрация там бесплатная. Пользователю будет доступны 15 тысяч ассетов Объектов, материалов, текстур, деталей — полностью бесплатно и все высочайшего качества.

Unreal Engine 4

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

Таким образом у вас за несколько минут получится фотореалистичная сцена, которую раньше необходимо было создавать месяцами, а то и годами.

При этом интеграция Quixel Bridge достаточно гибкая — экспорт в Unreal Engine происходит в один клик.

Mixer

Unreal Engine 4

Стоит отметить еще один инструмент на базе Quixel Bridge — Mixer. Он работает в связке с Bridge. Если вы скачали что-то в Bridge, объект автоматически появится в Mixer. Он позволяет в два-три клика быстро изменить объект библиотеки с сохранением геометрии, но с новым шейдингом. При этом полученный результат можно сохранить как смарт-материал и использовать в последующих объектах.

Volume

Unreal Engine 4

Volume — страшная штука для любого рендера из-за обилия эффектов света и тени, а также огромного количества плашек с текстурами. Если раньше на обработку сцены уходили дни, а то и недели, то в Unreal подобные эффекты просчитываются в реальном времени с сохранением высокого качества картинки. Причем неважно, какие это эффекты в сцене: туман, дым, облака, свет. Те, кто занимается синематикой, будут в восторге.

Sequencer

Unreal Engine 4

Unreal Engine 4

Отдельно отмечу возможность регулировки скорости проигрывания клипов — можно ускорять или замедлять. Это важно для качественной передачи анимации и динамики, а также для синхронизации скорости.

CameraShake

Unreal Engine 4

В Sequencer есть еще интересный эффект под названием CameraShake — очень рекомендую его использовать, чтобы придать реалистичности поведения камеры, например, при взрыве.

Practicle FX

После того, как мы создали локацию, разместили персонажей и анимацию, получили картинку, осталось наложить разнообразные эффекты.

Unreal Engine 4


Раньше работа с эффектами в Unreal через Cascade была достаточно сложной и громоздкой. Благо, в четвертой версии движка был добавлен плагин Niagara. Он представляет собой автоматический конвертер. Достоинства плагина в том, что он дает большую производительность, высокое качество, а также предоставляет множество партиклов С помощью систем частиц создаются эффекты огня, дыма, искр и т.д. для насыщения сцены эффектами. Этот плагин наделен возможностью взаимодействия модулей между собой для придания более красивого визуала сцене.

Unreal Engine 4

Niagara также упрощает работу с толпой. Например, можно нарисовать косяк рыб, и он будет реалистично двигаться. При этом управление целым косяком очень простое: можно задавать им форму и направление движения.

При этом нарисовать подобную сцену в Niagara крайне просто, а рендер будет происходить в реальном времени.

Постпроцессинг и рендеринг

После постпроцессинга все объекты определенным образом окрашивают нашу сцену. Дополнительно ей придают окрас glow-эффекты, motion blur. В итоге картинка получается перенасыщенной с высоким контрастом. Поэтому необходима дополнительная цветокоррекция. Но перекрасить такую сцену бывает очень сложно из-за «пережаренных« цветов.

Unreal Engine 4

В Unreal Engine и до этого была встроенная цветокоррекция. Но раньше на нее в движке мало кто обращал внимание. Но в четвертой версии все изменилось. В цветокоррекцию Unreal Engine 4 был добавлен специальный и очень простой фильтр, который добавляет широкий цветовой диапазон, что важно для покраски сцены. А дальше цветокорректору становится проще ее вытянуть по атмосфере и настроению.

Еще один великолепный эффект — DOF (Depth of Field). Вы все знаете об эффекте боке, когда на фотографии задний фон размывается, создавая глубину, акцентируя больше внимания на объекте на переднем плане. Но стандартные рендеры не выдерживают этот эффект — появляются шумы и артефакты, а сам процесс создает дикую нагрузку на компьютеры. В Unreal Engine 4 DOF работает невероятно быстро, практически в реальном времени.

Хочу отметить всевозможные типы Render Pass. Иногда мы используем специфические слои, в которых объявляются разнообразные свойства. Например, добавить сцене объемности, наполнить ее воздухом, сделать десатурацию, прибавить освещения с правильным отражением. Можно даже добавить свои шейдеры с уникальными свойствами. В Unreal Engine 4 появилась даже поддержка новомодных эффектов трассировки лучей, благодаря видеокартам NVIDIA RTX 20-й и 30-й серии.

Unreal Engine 4

Напоследок, в Unreal Engine есть возможность использовать разнообразные консольные команды. Это необходимо для добавления тонких настроек эффектам, вроде прописывания приоритета для LOD. Бояться их не стоит, они простые в использовании и все описаны в документации — достаточно скопировать и вставить их в консоль.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: