今日存在するさまざまな形式のマルチプレイヤーについていくつか読んでいます。一言で言えば、業界標準の方法には次のものが含まれると思います。
- クライアント マシン/デバイスで各クライアントの物理演算を実行する
- このフィジックスの入力データをサーバーに送信する (独自のクライアント データと共に「サーバー」セッションを実行している別のクライアントである可能性があります)
- サーバーはこのデータを処理して、クライアントが正当な動きをしているかどうかを判断し、そうでない場合は、クライアントを強制的にその指示に同期させます (ラバー バンディング)。
- サーバーは、シミュレーションのために、他のクライアントからの履歴データを各クライアントに転送します。
- それぞれのクライアントの視点からの効果的な結果は、過去の他のクライアントを見ながら、現在の自分自身を演じることです.
- ヒット検出は、ゲームの状態を「巻き戻す」ことによってサーバー上で実行され、タイムスタンプでイベントが発生したかどうか、影響を受けたプレイヤーがその時点でどこにいたかを確認します。
現在、私は純粋な推測航法システムを使用しています。入力は各クライアントから収集され、各クライアントで物理演算が計算されます。これは機能しますが、プレイヤーの以前の位置/速度/方向への依存性が十分に高くないため、ユニットはすぐに同期やラバーバンドから外れます。別名: 彼らは自由に方向を変えたり、速度を速く頻繁に変更したりできます。
そうは言っても、どうすればこれを解決できますか?
クライアント シミュレーターは、各プレイヤーの複数のデータ ポイントを効果的に収集し、それらのノード間のレンダリングを補間する必要がありますか? (IE: 各クライアントには、他のすべてのクライアントの過去の位置に関する複数のデータ ポイントがあります)。
そのため、クライアントのシミュレータ描画プレーヤー B は、時間 0 でキューに位置 X0、X1、X2、X3 を持ちます。時間 0 -> 時間 1 の遷移の間で、関連する開始値 (場所、速度、方向) を知っています。 、など)と彼が来るはずの場所 時間 1.
これらの既知の過去の時間とデータ ポイントの間でこれらの値を補間するソリューションはありますか?
ありがとう!
ライアン