Input Buffering
Запам'ятовування трохи раннього натискання і виконання його, щойно дія стане можливою.
Приклади
Записано з інтерактивного демо нижче на цій сторінці.
Огляд
Буферизація інпуту зберігає натискання, що прийшло, коли дія ще неможлива — посеред анімації атаки, перед самим приземленням, під час ухилення, — і автоматично виконує його в мить, коли дія стає легальною, замість викидати.
Це працює, бо вмілі гравці тиснуть заздалегідь навмисно: вони ставлять у чергу наступний рух, а не промахуються таймінгом. Викидати ці натискання — карати саме тих, хто намагається грати плавно, а «я натиснув і нічого не сталося» — найруйнівніша фраза в game feel.
Разом із coyote time це ядро пробачливого інпуту — файтинги буферизують інпути з 90-х (без цього чейнити комбо було б майже неможливо), і та сама ідея робить стрибок-на-приземленні та черги атак миттєвими в будь-якому жанрі.
Інтерактивне демо
Де застосовується
Найкращі практики
Варто
- ✓Буферизуйте останнє натискання кожної дії з таймстемпом і перевіряйте «натиснуто протягом останніх N мс», коли дія стає доступною.
- ✓Тримайте вікна пер-дійними: буфер стрибка 100–200 мс чудовий, буфер ланцюжка атак може бути довшим, бо анімація телеграфує очікування.
- ✓Очищайте буфер після використання — одне натискання ніколи не має спрацювати двічі.
Не варто
- ✕Не буферизуйте вічно — натискання, збережене на цілу секунду, спрацьовує саме по собі й відчувається як привид, а не чуйність.
- ✕Не виконуйте буферизовану дію, якщо контекст змінився (атака, забуферена до отримання удару, не має виходити зі стаґеру).
- ✕Не поєднуйте буферизацію зі скасуванням анімацій бездумно — вирішіть, що спрацьовує першим, інакше комбо даблфайритимуть.
Поширені помилки
- ⚠Перевіряти GetButtonDown лише в кадрі, коли дія стала легальною, — гарантовано губиться кожне раннє натискання.
- ⚠Зберігати буфер булевою змінною без таймстемпа — натискання трисекундної давнини досі рахується «забуференим».
- ⚠Буферизувати в Update, а споживати у FixedUpdate без обережності — зрідка натискання губляться або читаються двічі.
Реалізація
Встав це у свого ШІ-асистента (Cursor, Copilot, Claude), щоб додати ефект у проєкт.
Додай у мій проєкт ефект "Input Buffering": Запам'ятовування трохи раннього натискання і виконання його, щойно дія стане можливою.
Як це працює: Буферизація інпуту зберігає натискання, що прийшло, коли дія ще неможлива — посеред анімації атаки, перед самим приземленням, під час ухилення, — і автоматично виконує його в мить, коли дія стає легальною, замість викидати.
Рекомендації:
- Буферизуйте останнє натискання кожної дії з таймстемпом і перевіряйте «натиснуто протягом останніх N мс», коли дія стає доступною.
- Тримайте вікна пер-дійними: буфер стрибка 100–200 мс чудовий, буфер ланцюжка атак може бути довшим, бо анімація телеграфує очікування.
- Очищайте буфер після використання — одне натискання ніколи не має спрацювати двічі.
Чого уникати:
- Не буферизуйте вічно — натискання, збережене на цілу секунду, спрацьовує саме по собі й відчувається як привид, а не чуйність.
- Не виконуйте буферизовану дію, якщо контекст змінився (атака, забуферена до отримання удару, не має виходити зі стаґеру).
- Не поєднуйте буферизацію зі скасуванням анімацій бездумно — вирішіть, що спрацьовує першим, інакше комбо даблфайритимуть.
Реалізуй ефект у тому рушії/стеку, який уже використовується в проєкті, і дотримуйся наявного стилю коду. Підключи його там, де це доречно.Джерела
- GMTK: Why Does Celeste Feel So Good to Play?
- Fighting-game input buffers — the technique's original home
Пов'язані ефекти
Coyote Time
Дозвіл стрибнути ще кілька кадрів після того, як персонаж зійшов з платформи.
Hit Stop
Заморозка дії на кілька кадрів у момент влучання.
Easing (Slow In / Slow Out)
Розгін на вході в рух і гальмування на виході замість сталої швидкості.
Коментарі
…