Самый простой способ объяснить клиентское предсказание
Мультиплеерное движение выглядит сложным. На деле это три шага: предсказать, сравнить, исправить.
Зачем это нужно
Без серверного авторитета читерство не остановить. Но если отправлять каждый ввод на сервер и ждать ответ, игрок увидит персонажа, который двигается через 80 мс после нажатия. В это невозможно играть.
Решение: клиент применяет движение локально сразу же и одновременно отправляет ввод на сервер. То есть он предсказывает будущее.
Три шага
Предсказание: клиент мгновенно симулирует ввод и записывает результат в буфер истории с номером тика.
Сравнение: когда сервер присылает свой результат, клиент сравнивает его с тем, что сохранил для этого тика.
Исправление: если расхождение в пределах допуска, ничего не делаем. Иначе ставим позицию сервера и заново проигрываем весь ввод с этого тика.
Ловушки на практике
Симуляция обязана быть детерминированной. Один и тот же ввод из одного и того же состояния должен давать один и тот же результат. Шаг физики на Time.deltaTime это ломает — используйте фиксированный тик.
Не исправляйте резко. Сглаживание мелких расхождений на протяжении нескольких кадров избавляет игрока от ощущения телепорта.
С чего начать
Сначала постройте одиночное движение на фиксированном тике и сделайте его детерминированным. Сетевой слой добавляется потом.
Кто меняет этот порядок местами, вынужден одновременно ловить и баги движения, и баги синхронизации. Проверено на себе.