Создание системы движения для шутера в Unity по мотивам ULTRAKILL
Краткое резюме
В статье описывается создание системы движения для динамичного шутера на платформе Unity, вдохновлённой игрой ULTRAKILL. Автор реализовал такие элементы, как быстрое движение без бега, высокий прыжок, отскоки от стен, резкое падение и рывок.
В процессе работы над собственным проектом в жанре first-person shooter на платформе Unity я столкнулся с необходимостью разработки уникальной системы передвижения, вдохновлённой игрой ULTRAKILL. Изначально этот проект был для меня своеобразным вызовом, поскольку шутеры далеки от моих привычных жанровых предпочтений. В ходе работы мне пришлось освоить множество новых аспектов, которыми я готов поделиться.
Среди задач, которые мне предстояло решить, были создание процедурных анимаций смены оружия, реализация механизмов Raycast и Projectile для выстрелов, разработка эффектов для дула оружия и эффектов попадания. Однако в данной статье я сосредоточусь на описании процесса создания системы движения для моей игры. Я надеюсь, что предложенное решение окажется интересным и полезным для других разработчиков.
Будучи скорее разработчиком, чем геймдизайнером, я стремился использовать конкретные примеры при разработке. В качестве ориентира я выбрал движения из ULTRAKILL, исключив скольжение. Остальные элементы, такие как быстрое движение без бега, высокий и плавный прыжок, отскоки от стен, резкое падение и рывок, были сохранены.
Положительные сигналы о том, что мне удалось воспроизвести ощущения оригинала, пришли в виде негативных комментариев от людей, которым не нравится ULTRAKILL. Это подтвердило, что я достиг желаемого эффекта.
Для реализации системы движения в моём проекте необходимо было учесть следующие аспекты:
* Стандартное движение на WASD с высокой скоростью без возможности перехода на бег.
* В воздухе движение пользователя должно сохраняться, но с уменьшением влияния ввода для сохранения контроля.
* Прыжки с сохранением инерции движения в момент прыжка.
* Отскоки от стен, аналогичные обычному прыжку, но с ограничением количества отскоков до приземления. После приземления счётчик обнуляется.
* Резкое падение, позволяющее пользователю приземлиться в нужный момент.
* Рывок, обеспечивающий резкое ускорение в направлении движения пользователя.
Один из подходов к реализации движения — использование компонента Character Controller в Unity. Согласно официальной документации, этот компонент предназначен для управления движением игрока и обнаружения столкновений без прямого использования Rigidbody из физического движка. Он часто применяется для управления персонажами в первом или третьем лице в играх, где требуется точное управление движением, не зависящее от физики. Character Controller добавляется на игровой объект и управляется через методы Move и SimpleMove. Столкновения обрабатываются автоматически, но разработчику придётся самостоятельно реализовывать логику для гравитации и взаимодействия с объектами Rigidbody.