10 クライアント側の予測を実装しています。ほとんどの説明は、クライアントが「プレーヤーを1ポジション上に移動する」のようなメッセージを送信することを前提としています。「プレイヤーのベロシティをxに設定」のようなメッセージを送信するとどうなりますか? クライアントでは、サーバーよりも先にプレイヤーが(クライアント側の予測によって)自分の速度を設定するため、2つが同期しなくなります。この問題は、平均遅延を考慮しても解消されません。 どうすればこれに取り組むことができますか? networking client-server movement-prediction — Blu3 ソース
8 冗長データを送信する必要があります。これは、位置と速度を送信することを意味します。同期していない場合でも、位置と速度を持っているため、補間関数を使用して軌道を修正できます。 次に、遅延アニメーション、アクセラレーションなどのいくつかのトリックを使用すると、待ち時間を隠すことができます。 編集:サーバーは信頼できると思います。 — セルヴィン ソース ご回答有難うございます。はい、サーバーは信頼できますが、速度で冗長データを送信した場合でも、クライアントはエラーを修正できますが、「クライアント/サーバーがエンティティに共有コードを使用する場合、予測エラーは実際には発生しません」などのことをよく読みますが、私の場合、それらは常にわずかに発生し、それが全体的にどもる原因になります。 — Blu3 2012年 1 @ user13842クライアントは常に同期しなくなります。Thelvynが言ったように、サーバーが送信するものに従って、クライアント側の位置と速度を修正する必要があります。そうすれば、クライアントが完全に同期していない限り、動きが途切れることはありません。修正に時間がかかりすぎるため、値をスナップする必要があります。 — dreta 2012年 これが、補間関数を使用する主な理由です。待ち時間は避けられないため、スムーズに動きを修正する必要があります。クライアントとサーバーは世界をシミュレートしますが、クライアントはサーバーをリッスンして修正を実行する必要があります。ソースエンジンネットワーキングで使用されるいくつかの手法:developer.valvesoftware.com/wiki/Source_Multiplayer_Networking — Thelvyn このGoogleトークでも簡単に言及されていますが、youtube.com — watch?v この特定の問題に対する別の解決策を見つけました。クライアントが各パケットで入力を適用した時間を追加します。意味#1の時間は0で、2番目の時間は100です。これでサーバーは、クライアントが前にではなく時間:100にボタンを押したことを認識します。 — Blu3 2012年