← Stanislav Deffiro
Case 01 · Prototype

Third-Person Slasher

Вдохновленный GhostRunner прототип слэшера с парированием, комбо-приемами и паркуром.

Engine UE5 · C++
Genre Third-Person Melee
Role Solo — design & code
Duration 1 неделя

↑ включите звук

01 /Overview & Core Loop

Данный прототип создавался как фанатская версия популярной игры Ghostrunner. Игра строится на двух столбах - паркур и напряженные сражения на мечах. Игра чередует (а иногда и сочетает) обе этих системы в одном непрерывном прохождении.

Core loop: спокойная/стартовая зона уровня -> сражение с противниками -> паркур-секция -> возвращение к старой зоне в новой области (вертикальность уровня) -> сражение с новым типом противника + паркур -> награда -> финальная секция уровня

02 /Design

решения по механикам и game feel
Problem

Боевая система была "плоской"

Solution

Чтобы добавить в сражения динамику, были добавлены VFX эффекты на удары, рандомайзер звуков попадания, а также созданы отдельные camera shake и camera boom для режиссирования боя.

Problem

Дерганье анимаций

Solution

Создана специальная кастомная State Machine под разные виды анимаций в разных состояниях, чтобы синхронизировать все Blend Spaces между собой в единую анимационную линию.

Problem

Линейные уровни

Solution

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

↑ включите звук

03 /Engineering

архитектура и реализация в движке

Ядро боя

Персонаж живёт в трёх стойках (ECombatStance: Unarmed / Combat / Block) и наборе флагов состояния. Комбо считает не окно ввода, а счётчик нажатий, — поэтому серия не рвётся на низком фреймрейте.

Анимации связаны с кодом через AnimNotifyes и States, благодаря чему все попадания четкие, а переходы между двумя атаками внутри одного комбо можно буферизовать и хранить для удобства игрока.

ACombatCharacter IParryable Root Motion AnimNotifyState

Архитектура ИИ

Толпа врагов заставляла постоянно отступать, ведь пять противников бьют одновременно, и уклоняться становится невозможно. Решение — UCombatDirector как WorldSubsystem: он выдаёт токен атаки, и в каждый момент бьёт допустимое для контекста боя число врагов.

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

WorldSubsystem Attack Token AI Perception

Карта систем

нажмите, чтобы раскрыть
Построение схемы…
Раскрыть карту систем

Игрок, боевые компоненты, анимация, ИИ и объекты мира. Сплошные связи - владение, пунктир - события: компоненты не знают друг о друге напрямую. Реализуются основные принципы программирования.

03.1 / Animation Blueprint самая сложная часть прототипа
AnimGraph: layered blend per bone
AnimGraph · layered blend

Три слоя анимации

Локомоция, переключение между стойками и боевые навыки вынесены в три разных слоя анимации, переключение между которыми осуществляется через Layered blend per bone (низ тела принадлежит базовой анимации, а верх может менять стойку) + Blend poses by Enum, за счет которого осуществляется плавное переключение между стойками.

Автомат состояний локомоции
State machine · locomotion

Движение со всеми этапами от разгона до остановки

Чтобы движение было плавным и реалистичным, каждое ключевое состояние (бег, шаг, прыжок, уворот) разбиты по внутренним состояниям: начало, середина и конец.

Автомат состояний оружия
Sub-machine · weapon

Стойка как отдельный автомат

Draw / Sheathe и Enter / Exit Block вынесены в свой маленький граф с возвратом в idle. Так обнажение меча и блок не смешиваются с локомоцией: их можно править и отлаживать, не трогая граф движения.

Blend space BS_Walk_Run_Combat
Blend space · BS_Walk_Run_Combat

Скорость × направление

Для каждого анимационного состояния, будь то движение, прыжок, кувырок и так далее создан свой 2D Bledn Space (direction X speed) которые высчитывает нужную анимацию через интерполяцию движения.

Нажмите в любом месте, чтобы закрыть
Карта систем · прокрутка в обе стороны Закрыть ✕

04 /Gallery

скриншоты и короткие петли · клик по скриншоту — увеличить
Blueprint персонажа с боевыми компонентами
Библиотека анимаций проекта
Отладочный вид NavMesh на блокаут-арене
loop
loop
loop
loop
loop

05 /What I learned

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

Next steps: Дальше я планирую углубить боевую систему, создать древо навыков с прокачкой способностей и скрестить это с комбо-приемами, чтобы игрок мог сам решать, какую серию атак ему использовать в бою.