リアルタイムマルチプレイヤープラットフォーマーゲームの作成には何が関係しますか?


13

ネットワーク/インターネットを介して作業したい「協力」機能を備えたプラットフォーマーゲームを作成しています。

今、私はすべてのプログラマーがゲームネットワーキングについて知っておくべきことなどの記事を含むネットワークゲームプログラミングを読み上げたので、ピアツーピアロックステップとサーバークライアント予測アーキテクチャのようなテクニックの違いを理解しています:

  • インターネット上でプレイされるリアルタイムゲームでは、ピアツーピアロックステップは単にオプションではないと結論付けました。
  • また、プラットフォーマーにとっても、単純なクライアントサーバーアーキテクチャ(何らかのクライアント予測のない)でも、サーバーへのラウンドトリップによって引き起こされるアクションとリアクションの間の遅延により、ゲームプレイが低下することを心配しています。(私は中央サーバーの必要性を排除したいと言ったので、プレーヤーの1人、クライアントだけが実際にこの遅れを経験します)。

これはクライアントの予測を残しますが、プラットフォーマーのような単純なゲームでさえ、これはまだかなり複雑に聞こえます。

マルチプレイヤープラットフォーマーゲーム用の有効なクライアント予測システムを作成するにはどうすればよいですか?


1
協力ゲームで心配する必要のないことの1つは、不正行為です;)
ジョナサンコネル

これは建設的ではないとフラグを立てました。提起された質問(「クライアントの予測を行うネットワークゲームを作成するのにどれくらいの作業が必要ですか。ネットワークコードで構成されるコードベースの半分になりますか?」)答えは基本的に「依存する」であり、これは良い答えではありません。
TravisG

-1、「作業量」は主観的です。
テトラッド

1
どれだけの作業かは単独では主観的ではありませんが、いくつかの要因(ゲームのサイズ、精度の要件など)に依存します。これらの要因は、多くの作業、少しの作業、またはどのタイプの作業がより良い質問ですか); しかし、私はOPが本当にどのくらいの労力が必要か、そしてこのタイプのコードがコードベースのどのくらいになるかを尋ねていると思います。言葉どおり、それは広すぎるかもしれません。私はより狭い解釈を選択し、それに答えました。OPは、質問をいくつかの非常に具体的なポイントに絞り込むために、もう少し努力する必要があると思います。
ネイト

@Tetradすみません-私はこの質問をできるだけ客観的にするように努力しましたが、私の質問は「Y型のゲーム用の有効なクライアント予測システムを作成するのは難しいですか」に要約されます-そうでなければ、私は私として学びます行くが、私の時間は限られているので、X日間のプレーの後の学習はあまりにも手間がかかりすぎる。Yの詳細を説明しますが、「あまりにもローカライズされている」という質問はしたくありません。ここでの主な問題は、すべてのプラットフォーマーに共通する動きです(この質問を他の人に役立ててもらいたいです)。この質問を改善できれば、提案を歓迎します。
ジャスティン

回答:


5

このような機能を実装することにした場合、コードベースの半分がネットワークコードに変わるとは思いません。

私の意見では、これを行う最も簡単な方法は、すべてのユーザー入力をできるだけ早く受け入れる「セントラル」サーバーをセットアップすることです(たとえそれが1人のプレイヤーがゲームを「ホスト」してから自分のサーバーに接続する場合であっても) 、各クライアントに送信します。

クライアントでは、キーボードからP1を読み取り、ネットワークからP2を読み取ることを除いて、ローカルで2人のプレーヤーの協力ゲームを実行する場合と同じようにこれを実装します。

サーバーは時々完全なゲーム状態を送信する必要があり、両方のクライアントはサーバーから新しいauthoratitave状態にスナップするか、新しい状態にスライドすることができます(数秒以上)。ひどいパケット損失やサーバーごとのクライアントのトンがなければ、このアプローチはあなたが概説する状況に十分なはずです。


これは、クライアントサーバーアプローチと同じくらい簡単です(1つのクライアントがサーバーをホストすることを除いて->専用サーバーは必要ありませんが、とにかく決定されたサーバーを必要とするUDP + NATパンチスルーラインを使用する必要があります)。次に、ロックステップ方式を提案します(完全なゲーム状態の送信について話しているように)、これは私見ではありません、クライアントサーバーがはるかに簡単なインターネット(おそらくLAN経由)でゲームを実行する場合の最良の方法です実装する。
ヴァルモンド

1
いいえ、時折完全なゲームの状態を送信することをお勧めします。そうすれば、クライアントはそれがあまりにも遠くないことを確認できます。
ネイト

2

クライアント予測を備えた完全に機能するmORPGスタイルのゲームがあり(ゲームはまだ完成していませんが、「OK」で実行されます)、サーバー用の40.000行のコードとクライアント用のダブルがあります(ツールなどに同じ量を追加します) 。)。予測はおそらく数百行(それでも)以下であり、ネットワーク全体は数千行ですが、5.000以下(線を描く場所によって異なります)です。

あいまいな質問あいまいな回答;-)


2

ネットワークコードの大部分は、プレイしているゲームに依存しない可能性があります。そのため、そしてあなたがネットワーキングに慣れていないので、私があなたに勧める最初のことはあなたのためにそれをするライブラリを見つけることです。たとえば、RakNet。

ゲームコードで必要になることの1つは、補間と予測に使用できる複数の異なるゲーム状態を処理する機能です。これは、前もって設計するのはかなり簡単ですが、既存のシングルプレイヤーゲームを変更する場合、かなりの量の作業になる可能性があります。

また、インターネット上で見知らぬ人にピアツーピアゲームをプレイさせる場合は、おそらくロビー/マッチメイキングを処理するサーバーが少なくとも1台必要になることに注意してください。

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