Game Feel Library
← До каталогу
БійПросунутий

Bullet Time

Сповільнення світу, поки гравець рухається на повній швидкості, — два годинники, а не один.

timecombatsystemsslow-motion

Приклади

Записано з інтерактивного демо нижче на цій сторінці.

Огляд

Bullet time сповільнює все, крім гравця: вороги, снаряди і VFX повзуть, а гравець ухиляється і цілиться в нормальному темпі — фірмовий прийом Max Payne і момент, коли слоу-мо перестає бути глобальним перемикачем і стає системною задачею.

Глобальний Time.timeScale цього не вміє: він сповільнює всіх порівну. Справжня техніка дає об'єктам локальні годинники — кожен споживач множить дельту часу на свій коефіцієнт, — тож «світ» біжить на 0.2, а «гравець» на 1.0. Фізика, швидкості анімацій, частки і пітч звуку мають поважати правильний годинник — саме тому це Advanced.

Виграш — фантазія про силу, якої не дасть глобальне слоу-мо: гравець не дивиться на повільний світ, він швидкий у ньому. Контраст двох швидкостей — видимий у кожній парі об'єктів, що перетинаються, — і є весь ефект.

Інтерактивне демо

WORLD ×1.00 · PLAYER ×1.00
Масштаб часу світу0.2
Тривалість сповільнення1500ms

Де застосовується

ШутериЕкшнСтелсЗдібності

Найкращі практики

Варто

  • Проводьте кожного споживача часу через посилання на годинник (світовий чи гравцевий), а не через пряме читання Time.deltaTime.
  • Ізьте вхід і вихід зі сповільнення за ~100–200 мс — миттєвий стрибок 1.0→0.2 читається як фриз, а не здібність.
  • Опускайте пітч звуків світу, поки він сповільнений, — вухо помічає розсинхронений звук швидше, ніж око — рух.

Не варто

  • Не реалізуйте через глобальний timeScale плюс «прискорити гравця на компенсацію» — анімації, фізика й затримка інпуту розлазяться.
  • Не пускайте UI, згладжування камери чи опитування інпуту на світовому годиннику — інтерфейс мусить жити в реальному часі.
  • Не лишайте фізику світу на дефолтному fixed timestep, якщо світовий годинник рухає Rigidbody, — заїкання з'явиться саме тоді, коли всі дивляться.

Поширені помилки

Реалізація

Встав це у свого ШІ-асистента (Cursor, Copilot, Claude), щоб додати ефект у проєкт.

Промт
Додай у мій проєкт ефект "Bullet Time": Сповільнення світу, поки гравець рухається на повній швидкості, — два годинники, а не один.

Як це працює: Bullet time сповільнює все, крім гравця: вороги, снаряди і VFX повзуть, а гравець ухиляється і цілиться в нормальному темпі — фірмовий прийом Max Payne і момент, коли слоу-мо перестає бути глобальним перемикачем і стає системною задачею.

Рекомендації:
- Проводьте кожного споживача часу через посилання на годинник (світовий чи гравцевий), а не через пряме читання Time.deltaTime.
- Ізьте вхід і вихід зі сповільнення за ~100–200 мс — миттєвий стрибок 1.0→0.2 читається як фриз, а не здібність.
- Опускайте пітч звуків світу, поки він сповільнений, — вухо помічає розсинхронений звук швидше, ніж око — рух.

Чого уникати:
- Не реалізуйте через глобальний timeScale плюс «прискорити гравця на компенсацію» — анімації, фізика й затримка інпуту розлазяться.
- Не пускайте UI, згладжування камери чи опитування інпуту на світовому годиннику — інтерфейс мусить жити в реальному часі.
- Не лишайте фізику світу на дефолтному fixed timestep, якщо світовий годинник рухає Rigidbody, — заїкання з'явиться саме тоді, коли всі дивляться.

Реалізуй ефект у тому рушії/стеку, який уже використовується в проєкті, і дотримуйся наявного стилю коду. Підключи його там, де це доречно.

Джерела

Пов'язані ефекти

Коментарі