Программирование UX и программирование геймплея для мрачного шутера от первого лица с элементами выживания.
Данный лонгрид описывает основные методы и решения, примененные в коде игры для обеспечения плавности геймплея и приятной обратной связи.
БЛИЖНИЙ БОЙ
Урон по врагам во время ближнего боя происходит с помощью бросания луча, определяющего объект, с которым произошло столкновение при нажатии ЛКМ.
Для реализации притягивания к поражаемой цели во время атаки, создан алгоритм линейной интерполяции между точками А и B.
КВЕСТЫ И ИСПЫТАНИЯ
Разрушение статуй — одно из испытаний. Оно реализовано с помощью встроенного в UE5 инструмента — Fracture Mode, позволяющего разделить объект на множество мелких частей. Во избежание проблем с FPS, все осколки удаляются через 5 секунд.
Чтобы исключить семантический конфликт в выполнении кода, следующий квест невыполним без завершения предыдущего.
МУВМЕНТ
Мувмент персонажа представляет из себя комплексную систему функций, плавно сменяющихся с помощью ноды Switch Movement State. Для усиления ощущения бега, ходьбы и скольжения используются камерашейки.
БОЕВЫЕ СИСТЕМЫ
Чтобы создать бесшовную боевую систему, нажатие игроком кнопки мыши делится на 3 состояния (типа функций):
— нажатие
— удержание
— отпускание
Отзывчивость боевки создается благодаря эффектам, камерашейкам, а также уникальной траектории у каждого проджектайла.
Помимо этого каждая атака является механически оригинальной. Например, точка появления черной дыры определяется бросанием луча, а сама дыра вблизи имеет немного пониженную гравитацию.
ВРАГИ
Для спавна врагов созданы несколько Blueprint классов. BP_WaveControl определяет общее состояние волны: сколько врагов появилось, было уничтожено, какой лимит. BP_Spawn отвечает за корректность их появления.
Логика поведения врагов создана с использованием классического фреймворка Behaviour Tree, позволяющего последовательно переключаться между их состоянием.
Например, с помощью ноды Move To оборотень передвигается, однако раз в 4 секунды срабатывает Cooldown, и он швыряет в мага булыжник.
Передвижение всех юнитов создано с помощью системы NavMesh. Во избежание их застревания используется собственная функция jumpandvelocity или удаление, если разница векторов скорости в течение 12 секунд равна 0.
ПЕРКИ И УЛУЧШЕНИЯ
Для буста персонажа во время покупки перков реализована простая система: нодой Switch On Int определяется, какую переменную изменить в зависимости от типа покупаемого перка.
БОСС
Чтобы не создавать лишний уровень, который займет 200 МБ в память компьютера, арена с боссом находится в отдельном DataLayer, а сторонний функционал при перемещении к нему останавливается.
Кооперативный режим будет работать через сетевую сессию, в которой один из игроков выступает хостом, синхронизируя игровой мир в реальном времени.
Игровой трейлер:




