マルチプレイヤーでのジャンプなどのアクションを同期する方法は?


11

私は初心者のゲーム開発者で、マルチプレイヤーゲームについて研究しています。私は常にある程度の待ち時間があることを観察しました、プレイヤーは常に過去のアクションから更新を取得します。しかし、レイテンシを処理する推測航法のようなテクニックがあります。動きを予測してスムーズに動きます。しかし、ジャンプ、歩行停止などのアクションを同期させるにはどうすればよいでしょうか。

クライアントAが動いていて、100m /秒の速度で10.2時間に100mにいて、この情報を送信したとします。クライアントBはこの情報を少し後で受け取り、10.4にします。クライアントBでは、予測を使用して、クライアントAを120mに配置できます。しかし、クライアントが10.3で110mでジャンプしたとしたらどうでしょう。それを予測することはできません。予測を使用しているため、クライアントAの過去のジャンプを示すことはできません。

ジャンプアクションをまったく送信しないことで、この問題に対処できます。しかし、私のゲームにプレーヤーが転んで死ぬ可能性があるいくつかの空白がある場合はどうでしょうか。したがって、ジャンプアクションを同期しない場合、他のプレーヤーは1人のプレーヤーが走っていることを観察し、その後彼は無効になり、画面に表示されて視覚的なエンゲージメントを破壊します。

ジャンプは単なる例であり、予測が機能しない多くのシナリオがあるかもしれません。だから、どうやってそれらに対処するのですか?そのような例の1つは、Awesomenautsのようなマルチプレイヤーオンラインバトルアリーナゲームです。


私はマルチプレイヤーについてあまり知らないので、適切な答えを出すことができません。しかし、私が選んだものから、理想的なセットアップは、クライアントが多かれ少なかれ馬鹿であり、キーボード、マウス、ゲームパッドなどの入力をサーバーに送信するだけであり、サーバーはその全体の動きと世界を更新することを行い、ポジションとその他すべての関連データをクライアントに送り、クライアントは結果を表示します。これにより、予測や同様のことがほとんどなくなります。
クリスチャン

@クリスチャンねえ!返信いただきありがとうございます。私はこのアプローチについて知っていますが、レイテンシが高く、さらにAppWarpのBaaSリアルタイムシステムを使用している場合、ゲームプレイがぎくしゃくする可能性があるため、すべてのロジックはクライアント側にのみ存在します。
Suyash Mohan 2013

両方の方法を組み合わせることが権威サーバーです。クライアントとサーバーの両方がシミュレートし、クライアントが入力を送信し、サーバーが信頼できる状態を送り返します。クライアントは、信頼できる状態に一致するように状態を調整します。したがって、状態が一致すると、クライアントはローカルでシミュレーションされているように実行されます(ラグなし)。
MichaelHouse

私は最近、このチュートリアルシリーズがレイテンシの管理に関する良いヒントを提供することを発見しました。それはあなたの興味に関連
クリスウェールズ

回答:


8

この場合、推測航法は最良のアイデアではない可能性があります。エンティティの補間を行う必要があります(過去の他のプレーヤーを効果的にレンダリングし、常に実際の有効な位置を提供します)。これについては、ここで詳しく説明しています。過去にわずかにプレーヤーを見ることが許容されるかどうかは、何をしようとしているかの詳細に依存します。


4
私は最初のネットワークマルチプレイヤーゲームを作成するときにこのアプローチを使用しました。実際、私はリファレンスとして@ggambettを使用しました。それは私にはうまくいきました。
NoobsArePeople2 2013

1

ソースエンジンに関するかなり詳細な記事があります。関連するソースコードの一部は、ソースSDKの一部としても利用できるようです。

https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

サーバークライアントモデルでネットワーク遅延を処理するために、いくつかの手法を使用します。重要な点は、ローカルクライアントが入力や他のイベントをサーバーがないかのようにローカルで処理し、サーバーがクライアントが後で間違ったと言った可能性に対処することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.