私は実際にこれを実装していません(そのため、すぐには見られない問題があるかもしれません)が、私は助けようと思った。
あなたが言ったことは次のとおりです。
クライアントAはT0で入力を送信します
サーバーはT1で入力を受け取ります
すべてのクライアントはT2で変更を受け取ります
ただし、T2では、クライアント予測を使用して、クライアントAはT4に適切な位置にあります。
サーバー時間の観点から考えると便利でしょう。その(おそらく)補間の仕組みに非常に似ています。
すべてのコマンドはサーバー時間とともに送信されます。このサーバー時間は、サーバーティックを照会してping時間を補正することにより、一致の開始時に計算されます。クライアントでは、独自のローカルティックカウントがあり、送信する各コマンドはサーバーティックに変換されます(単純な減算操作です)
また、クライアントは常に「過去」にレンダリングしています。したがって、クライアントが見る世界は、たとえばサーバーの実際の時間より100ミリ秒遅れていると仮定します。
サーバー時間(Sで指定)を使用して例を言い換えましょう。
クライアントは、サーバー時間S0でT0に入力を送信します(これは、実際には「サーバー時間から補間時間を引いたクライアント表現」です)。クライアントはサーバーからの応答を待たずにすぐに移動します。
サーバーはT1で入力を受け取ります。サーバーは、クライアントによって指定されたサーバー時間S0でクライアントの信頼できる位置を把握します。それをクライアントに送信します。
クライアントは、T2で権限のある位置を受け取ります(サーバー時間S0の指定もあります)。クライアントは、過去のイベントに相当する過去の時間を追跡します(おそらくすべての未確認の予測のキュー)。
サーバーがS0に送り返す予測位置/速度/何でも、クライアントがS0に保存したものと異なる場合、クライアントはこれを何らかの方法で処理します。プレーヤーを過去の位置にスナップバックするか、以前の入力を再シミュレートするか、またはおそらく私が考えていない他の何かによって。