マルチプレイヤー実装、選択した場合、後で実装できますか?


15

XNAを使用してゲームプロジェクトをビルドする予定です。マルチプレイヤー機能を追加したいかどうかは、現時点では完全にはわかりませんが、私はまだ新しいことを解決するために他の多くの問題を抱えています。私はプロジェクトが必ずしも手に負えないようにしたくない。

私の質問は、マルチプレイヤーのサポートを追加する計画なしにプロジェクトに向かう場合、後戻りして(通常はそうではありません)マルチプレイヤーゲームをキャプチャするために必要なコードを追加するのは簡単ですか?

回答:


24

Zoidcomネットワークライブラリマニュアルからの適切なアドバイスを以下に示します

プロジェクトが計画段階にある場合は、ネットワーク化のためにプロジェクトを最初から設計することをお勧めします。プロジェクトの後半の状態でネットワークコードをボルトで固定すると、大規模なリファクタリングまたは大量のハッキングが発生し、コードのメンテナンスやバグがほとんど発生しなくなります。

最もクリーンな方法は、ゲーム全体を純粋なネットワークゲームであるかのように実装することです。つまり、専用サーバー用のコードを実装し、サーバーコードとしてのみこのコードを実装します。同様の方法でゲームクライアントコードを実装します。サーバーとクライアントは同じプロセスで実行でき、実際のネットワークソケットを使用する必要はありませんが、それらは別個のエンティティであり、すべてのコードはそのように動作するように設計する必要があります。プレーヤーがジャンプするとき、プレーヤーのジャンプベクトルを直接変更せずに、「jump-key-pressed」パケットをサーバーに送信し、サーバーにそれを処理させます。

これは、シングルプレイヤーゲームであっても、バックグラウンドで実行されている目に見えないサーバーがあることを意味します。同じゲームのマルチプレイヤーバージョンでは、ローカルのマルチプレイヤーではなくリモートサーバーに接続するだけで済みます。これの利点は次のとおりです。

プロジェクト全体のクリーンコード中に、ネットワークコードがテストおよび開発されるシングルおよびマルチプレイヤー用の個別のコードはありません。

このスキームを使用するプロジェクトは、ほとんどすべてのQuakeエンジン、Civilization 4、Neverwinter Nightsなどを使用したゲームです。

同じプロセスでクライアントとサーバーを遅延なしで接続するには、ローカルソケットを使用できます。これらはZoidcomによって提供され、OSレベルのソケットを経由せずに、1つのZCom_Controlから別のZCom_Controlにパケットを直接渡します。


これは私が嫌いな純粋なサーバー権限の設定のようです。サーバーへのpingが低い場合、正常に再生されます。しかし、pingが高くなりすぎると、画面上のアクションが遅れます。私はソースエンジンが使用する方法を好んでおり、クライアントは物理的および物事をローカルで実行し、すべてのアクションがすぐに表示されますが、サーバーはそれをチェックして人々がハッキングしていないことを確認します、サーバーは正しい状態をプレーヤーに送信し、クライアントのシミュレーションを新しいデータで上書きします。
AttackingHobo

8
@AttackingHobo:あなたはクライアントの予測を説明しているだけです。クライアント予測とサーバー権限を一緒に使用できますが、Zoidcomのマニュアルに記載されているアーキテクチャを妨げるものではありません。

@AttackingHobo @Joe:Zoidcomは実際にクライアント側の予測をサポートしています^^
レフティウム

2

レフティウムの答えに引用されているアドバイスに同意します。後で追加できないため、最初からネットワーキング用に設計します

初めてマルチプレイヤーゲームを作成しようとしたとき(私はシングルプレイヤーゲームを作成しようとしてもいませんでした!)、最初にゲームを動作させてからネットワークを追加することになると考えました。悪いアイデア。私は本当に退屈なシングルプレイヤーゲームのプロトタイプを残されていましたが、それをマルチプレイヤーゲームに変換する方法はわかりません。私はそれを完全に廃棄してやり直しました。今回は最初からマルチプレイヤーネットワーキングコードを記述しました。すべてがクリックされました。

不可能ではないと確信していますワンプレイヤーゲームから始めてマルチプレイヤー機能を追加するます。あなたがそれを熟考した場合、それを正しく計画し、あなたの戦略を知っていることを確認し、それを試してみてください。少なくとも解決するのは面白いパズルになると思います。ただし、ネットワーキングをどのように追加するかについての計画を必ず確認してください。

中間点があると思います(試したことはありませんが)。ネットワーク/マルチプレイヤー機能用のダミークラスをいくつか作成し、シングルプレイヤーゲームを作成するときにそれらを使用することに熱心に取り組むことができます。その後、マルチプレイヤーを実装することに決めた場合は、ダミークラスを入力するだけでほぼ完了です。これはサーバー/クライアントメソッドに非常に近づいていますが、より少ない作業で逃げることができるかもしれません。結局のところ、シングルプレイヤーゲームはマルチプレイヤーゲームよりも簡単に作成できるため、シングルプレイヤーゲームをマルチプレイヤーゲームのように作成する場合、単にマルチプレイヤーゲームにしないのはなぜでしょうか。

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