Александр Зуев
Platformer - 2D-платформер на Unity (C#)
Александр Зуев
#Программирование игр

Platformer - 2D-платформер на Unity (C#)

32 
Александр Зуев Россия, Краснодар
Поделиться: 0 0 0
Platformer - 2D-платформер на Unity (C#)
Бюджет

90 000

Сфера

Информационные технологии и интернет

Сдано

Май 2022

Задача

Требовалось реализовать полнофункциональный платформер с богатой механикой, избежав типичной для жанра проблемы - спагетти из состояний, когда передвижение, бой, урон, смерть, респаун и UI завязаны друг на друга через прямые ссылки и флаги. По мере роста числа механик (прыжки по стенам, два типа оружия, урон от среды, очки и жизни) такой код становится хрупким: любое изменение в одной системе ломает соседние, а тайминги (отложенный урон, задержки атаки, респаун) разъезжаются между кадрами.

Ключевые требования:

- Расширяемость: добавление новой механики не должно затрагивать существующие системы.

- Детерминированность: физика и игровые события должны вести себя одинаково независимо от частоты кадров.

- Производительность: отсутствие аллокаций и GC-пиков в горячем цикле обработки событий.

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

Решение

В основу положена архитектура на дискретно-событийном симуляторе: все, что происходит в игре (получение урона, прыжок, приземление, столкновение с врагом, вход в зону смерти, сбор токена, смерть врага), оформлено как самостоятельный класс-событие. События планируются с временным смещением (Schedule<PlayerDamage>(), отложенная атака, респаун) и исполняются централизованным тиком симуляции, когда наступает их время.

Это дает жесткую развязку систем: PlayerController не знает, что делает урон - он лишь планирует событие PlayerDamage, а обработчик события сам решает логику. Новая механика добавляется как новый класс-событие, не трогая ни строчки в существующих контроллерах.

Поверх ядра реализованы прикладные механики:

  • Передвижение: конечный автомат состояний прыжка (Grounded - PrepareToJump - Jumping - InFlight - Landed), двойной прыжок, детекция стен через OverlapCircle с определением направления, цепляние за стену с понижением гравитации и усиленным настенным прыжком.

  • Боевые системы: дальний бой (инстанцирование снарядов с автоудалением и направлением по спрайту) и ближний бой мечом с динамическим расширением коллайдера атаки на время удара и синхронизацией с анимацией.

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

Результат

  • Завершенный играбельный платформер с двумя сценами (меню и уровень), полным боевым циклом, продвинутым передвижением и системой прогресса (жизни, токены, UI-бары).

  • 14+ изолированных игровых событий как отдельных классов - новая механика подключается без модификации существующих систем (архитектура, открытая на расширение и закрытая на изменение).

  • Нулевые аллокации в горячем цикле благодаря пулингу событий - отсутствие GC-пиков и просадок кадров при интенсивном геймплее.

  • Планирование событий за O(log n) через собственную бинарную кучу - стабильные тайминги при любом числе отложенных действий.

  • Детерминированная, независимая от частоты кадров физика на базе swept-collision и обработки нормалей поверхностей - корректные склоны, приземления и прыжки.

  • 5+ интегрированных механик (двойной прыжок, настенный прыжок и цепляние, дальний бой, ближний бой, водная среда) поверх единого физического и событийного фундамента.

  • Ускорение итераций гейм-дизайна за счет собственного редактор-инструментария: визуальная настройка уровней и маршрутов врагов без участия программиста.

https://mega.nz/file/Ze82kIZT#DTjKMQb_t7PtWURw4zkn3SmX8X6nY3FvrEH0SI8-ij8

Стек технологий

  • С# С# Язык программирования
  • Unity Unity Среда разработки

Оцените кейс
Спасибо за оценку
Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.
оставить заявку

Хотите заказать похожий проект?

Оставить заявку