Вдохновленный GhostRunner прототип слэшера с парированием, комбо-приемами и паркуром.
↑ включите звук
Данный прототип создавался как фанатская версия популярной игры Ghostrunner. Игра строится на двух столбах - паркур и напряженные сражения на мечах. Игра чередует (а иногда и сочетает) обе этих системы в одном непрерывном прохождении.
Core loop: спокойная/стартовая зона уровня -> сражение с противниками -> паркур-секция -> возвращение к старой зоне в новой области (вертикальность уровня) -> сражение с новым типом противника + паркур -> награда -> финальная секция уровня
Чтобы добавить в сражения динамику, были добавлены VFX эффекты на удары, рандомайзер звуков попадания, а также созданы отдельные camera shake и camera boom для режиссирования боя.
Создана специальная кастомная State Machine под разные виды анимаций в разных состояниях, чтобы синхронизировать все Blend Spaces между собой в единую анимационную линию.
Чтобы игрок не заскучал я добавил в свои уровни вертикальность: одна и та же зона может проходится на разных высотах, таким образом, чтобы игрок каждый раз получал новый опыт, но и не уходил слишком далеко.
↑ включите звук
Персонаж живёт в трёх стойках (ECombatStance: Unarmed / Combat / Block) и наборе флагов состояния. Комбо считает не окно ввода, а счётчик нажатий, — поэтому серия не рвётся на низком фреймрейте.
Анимации связаны с кодом через AnimNotifyes и States, благодаря чему все попадания четкие, а переходы между двумя атаками внутри одного комбо можно буферизовать и хранить для удобства игрока.
Толпа врагов заставляла постоянно отступать, ведь пять противников бьют одновременно, и уклоняться становится невозможно. Решение — UCombatDirector как WorldSubsystem: он выдаёт токен атаки, и в каждый момент бьёт допустимое для контекста боя число врагов.
Остальные обходят игрока и расталкиваются, оставаясь угрозой. Бой один-против-трёх стал читаемым без снижения сложности.
Игрок, боевые компоненты, анимация, ИИ и объекты мира. Сплошные связи - владение, пунктир - события: компоненты не знают друг о друге напрямую. Реализуются основные принципы программирования.
Локомоция, переключение между стойками и боевые навыки вынесены в три разных слоя анимации, переключение между которыми осуществляется через Layered blend per bone (низ тела принадлежит базовой анимации, а верх может менять стойку) + Blend poses by Enum, за счет которого осуществляется плавное переключение между стойками.
Чтобы движение было плавным и реалистичным, каждое ключевое состояние (бег, шаг, прыжок, уворот) разбиты по внутренним состояниям: начало, середина и конец.
Draw / Sheathe и Enter / Exit Block вынесены в свой маленький граф с возвратом в idle. Так обнажение меча и блок не смешиваются с локомоцией: их можно править и отлаживать, не трогая граф движения.
Для каждого анимационного состояния, будь то движение, прыжок, кувырок и так далее создан свой 2D Bledn Space (direction X speed) которые высчитывает нужную анимацию через интерполяцию движения.
Самое важное что удалось выяснить при разработке: важнейшая часть приятной игры - плавное и отзывчивое управление, которое не раздражает игрока, а наоборот подстегивает его изучать игру дальше.
Next steps: Дальше я планирую углубить боевую систему, создать древо навыков с прокачкой способностей и скрестить это с комбо-приемами, чтобы игрок мог сам решать, какую серию атак ему использовать в бою.