나는 실제로 이것을 구현하지 않았으므로 (즉시 보이지 않는 몇 가지 문제가있을 수 있음) 도움을 줄 것이라고 생각했습니다.
당신이 말한 것은 다음과 같습니다.
클라이언트 A는 T0에서 입력을 보냅니다.
서버는 T1에서 입력을받습니다.
모든 고객은 T2에서 변경 사항을받습니다.
그러나 T2에서 클라이언트 예측을 사용하여 클라이언트 A는 이제 T4에 적합한 위치에 있습니다.
서버 시간 측면에서 생각하는 것이 유용 할 것입니다. 보간 작동 방식과 매우 유사 합니다.
모든 명령은 서버 시간과 함께 전송됩니다. 이 서버 시간은 핑 시간을 보상하여 서버 틱을 쿼리하여 경기 시작시 계산됩니다. 클라이언트에서 당신은 당신의 자신의 로컬 틱 카운트를 가지고 있고 당신이 전송하는 각 명령은 서버 틱으로 변환됩니다 (간단한 빼기 연산입니다)
또한 클라이언트는 항상 "과거에"렌더링합니다. 따라서 클라이언트가 보는 세계는 서버 시간이 실제로 100ms 뒤에 있다고 가정합니다.
따라서 서버 시간 (S로 지정)으로 예제를 바꾸겠습니다.
클라이언트는 서버 시간이 S0 인 T0에서 입력을 보냅니다 (실제로 "서버 시간에서 보간 시간을 뺀 클라이언트 표현"이라고 생각합니다). 클라이언트는 서버의 응답을 기다리지 않고 즉시 이동합니다.
서버는 T1에서 입력을받습니다. 서버는 클라이언트가 제공 한 서버 시간 S0에서 클라이언트의 권한있는 위치를 파악합니다. 클라이언트에게 보냅니다.
클라이언트는 T2에서 정식 위치를받습니다 (여전히 서버 시간 S0을 지정 함). 클라이언트는 이전 이벤트 (어쩌면 모든 확인되지 않은 예측의 대기열)에 해당하는 과거 시간을 추적합니다.
서버가 S0에서 다시 전송하는 위치 / 속도 / 예상치가 클라이언트가 S0에 저장 한 것과 다를 경우, 클라이언트는이를 어떻게 처리합니다. 플레이어를 과거의 위치로 되돌 리거나 이전 입력을 다시 시뮬레이션하거나 내가 생각하지 못한 다른 것을 시도합니다.