90 000
Информационные технологии и интернет
Май 2022
Требовалось реализовать полнофункциональный платформер с богатой механикой, избежав типичной для жанра проблемы - спагетти из состояний, когда передвижение, бой, урон, смерть, респаун и UI завязаны друг на друга через прямые ссылки и флаги. По мере роста числа механик (прыжки по стенам, два типа оружия, урон от среды, очки и жизни) такой код становится хрупким: любое изменение в одной системе ломает соседние, а тайминги (отложенный урон, задержки атаки, респаун) разъезжаются между кадрами.
Ключевые требования:
- Расширяемость: добавление новой механики не должно затрагивать существующие системы.
- Детерминированность: физика и игровые события должны вести себя одинаково независимо от частоты кадров.
- Производительность: отсутствие аллокаций и GC-пиков в горячем цикле обработки событий.
- Удобство гейм-дизайна: уровни и поведение врагов должны настраиваться визуально, без правки кода.
В основу положена архитектура на дискретно-событийном симуляторе: все, что происходит в игре (получение урона, прыжок, приземление, столкновение с врагом, вход в зону смерти, сбор токена, смерть врага), оформлено как самостоятельный класс-событие. События планируются с временным смещением (Schedule<PlayerDamage>(), отложенная атака, респаун) и исполняются централизованным тиком симуляции, когда наступает их время.
Это дает жесткую развязку систем: PlayerController не знает, что делает урон - он лишь планирует событие PlayerDamage, а обработчик события сам решает логику. Новая механика добавляется как новый класс-событие, не трогая ни строчки в существующих контроллерах.
Поверх ядра реализованы прикладные механики:
Передвижение: конечный автомат состояний прыжка (Grounded - PrepareToJump - Jumping - InFlight - Landed), двойной прыжок, детекция стен через OverlapCircle с определением направления, цепляние за стену с понижением гравитации и усиленным настенным прыжком.
Боевые системы: дальний бой (инстанцирование снарядов с автоудалением и направлением по спрайту) и ближний бой мечом с динамическим расширением коллайдера атаки на время удара и синхронизацией с анимацией.
Среда: водные зоны, замедляющие игрока и наносящие периодический урон; зоны смерти и победы; патрулирующие враги с возможностью прыжка вдоль маршрута.
Завершенный играбельный платформер с двумя сценами (меню и уровень), полным боевым циклом, продвинутым передвижением и системой прогресса (жизни, токены, UI-бары).
14+ изолированных игровых событий как отдельных классов - новая механика подключается без модификации существующих систем (архитектура, открытая на расширение и закрытая на изменение).
Нулевые аллокации в горячем цикле благодаря пулингу событий - отсутствие GC-пиков и просадок кадров при интенсивном геймплее.
Планирование событий за O(log n) через собственную бинарную кучу - стабильные тайминги при любом числе отложенных действий.
Детерминированная, независимая от частоты кадров физика на базе swept-collision и обработки нормалей поверхностей - корректные склоны, приземления и прыжки.
5+ интегрированных механик (двойной прыжок, настенный прыжок и цепляние, дальний бой, ближний бой, водная среда) поверх единого физического и событийного фундамента.
Ускорение итераций гейм-дизайна за счет собственного редактор-инструментария: визуальная настройка уровней и маршрутов врагов без участия программиста.