Извините, что это не дает прямого ответа на ваш вопрос, но, вообще говоря, вы не должны слишком сильно полагаться на измерение задержки, потому что она может быть весьма переменной. Мало того, вы не знаете, является ли измеренное вами время пинга симметричным, что важно. Нет смысла применять 10 мс коррекции задержки, если выясняется, что время пинга 20 мс фактически составляет 19 мс от сервера к клиенту и 1 мс от клиента к серверу. И задержка в терминах приложения не такая, как в терминах сети - вы можете пропинговать определенную машину и получить ответ через 20 мс, но если вы обращаетесь к серверу на этой машине, который обрабатывает сетевой ввод только 50 раз в секунду, то Ваши ответы будут задержаны на дополнительные от 0 до 20 мс, и это будет довольно непредсказуемо.
Это не означает, что измерение задержки не имеет смысла в сглаживании прогнозов, но не решит вашу проблему, просто немного ее очистите.
На первый взгляд, проблема здесь заключается в том, что вы отправили информацию в первом сообщении, которое вы используете для экстраполяции данных до получения последнего сообщения. Если все остальное остается постоянным, то вектор движения, указанный в первом сообщении, умноженный на время между сообщениями, даст серверу правильную конечную позицию, в которой клиент находился примерно сейчас - (latency / 2). Но если задержка изменится вообще, время между сообщениями будет увеличиваться или уменьшаться. Клиент может знать, что он переместился на 10 единиц, но сервер имитировал его перемещение на 9 или 11 единиц, прежде чем ему было приказано привязать его к 10 единицам.
Общее решение этого заключается в том, чтобы не предполагать, что задержка будет оставаться постоянной, а отправлять периодические обновления позиции, которые позволяют серверу проверять и исправлять позицию клиента. Всего 2 сообщения, как у вас сейчас, все ошибки найдены и исправлены после 2-го сообщения. При большем количестве сообщений ошибка распространяется на большее количество точек выборки, что обеспечивает более плавную и менее видимую коррекцию.
Это никогда не может быть совершенным, хотя: все, что требуется, - это скачок задержки в последнюю миллисекунду движения, и представление сервера будет превышено. Вы не сможете обойти это, если прогнозируете будущее движение на основе прошлых событий, поскольку нет реальной альтернативы выбору правильного, но позднего или неправильного, но своевременного, поскольку информация требует времени для путешествия. (Виноват Эйнштейн.)