Как сделать простые реплеиhttps://giannisakritidis.com/blog/Input-Replay-System/Я бы не сказал что это запись инпута. Это скорее статья про самое частое и классическое применение паттерна команда. Просто главное помнить, что такие реплеи — это условно архитектурная поддержка и в целом неплохой подход, так абстрагировать инпут через команды в геймплее где это возможно. А возможно это почти везде, где не слишком большой объём записываемых команд ввода. Но учитывая что всё можно свести к "нажал клавишу" и "отпустил клавишу" — записей будет немного. Или всё же нельзя писать чисто клавиши?
В статье описаны логические команды. Не учитывая состояние мира (но допустим у нас изменяет мир только игрок), такой подход как-то работает. Но при неаккуратном обращении с концепцией — она вообще не работает. Точнее работает для чего-то очень простого. Прикол в том, что чтобы работала сигнальная логика записи команд и т.п. Всё в игре должно быть дискретным (особенно если писать сигналы клавиш). То есть не бывает так, чтобы команды работали и при этом значения у нас были float, потому что будут проблемы с округлением. Тоже самое с зависимостью от фреймрейта и так далее. То есть продумывая такую систему нужно понимать много нюансов. Так как кажется логичным "просто запишем что нажимал пользователь и повторим", но в реальности это работает только в весьма специфично построенных системах.
Если у мира есть своя жизнь и своё состояние, то появляется зависимость от фреймрейта. Поэтому я бы считал этот пример иллюстративным примером по использованию паттерна команда, а не что-то, что можно как использовать систему реплеев. У меня была когда-то мысль, что в разы проще чем писать видео для реплея — просто запоминать инпуты. И попробовав разок я понял, что чтобы поддержать эту фичу, нужно чтобы вся архитектура приложения системно её обслуживала. Для тестирования и воспроизведения багов такая система — это конечно сказка) Всегда есть прямой репродьюс) Но это сильно усложняет разработку.
А кстати, кто-то ещё пробовал замрочиться с такой системой в своей игре? Я понял, что такое элементарно делается в головоломках и пошаговом геймплее, где состояние игры легко воспроизводить на любом шаге. А вот в реалтайм геймплее я чисто для тренировки попробовал сделать систему реплеев аналогичным способом, и плюнул, так как понял что поддерживать это прям дорого.
#интересное