衝突の検出は、サーバー側で行うか、クライアント/サーバー間で協調して行う必要がありますか?


24

私は非常に重い衝突検出処理を持つオンラインゲームに取り組んでいます。プレーヤーモデルは、サーバー側にのみ存在する他のプレーヤー、Mob、構造、地形、およびソリッドオブジェクトと衝突します(クライアントデータファイルには保存されません)。

セキュリティのために、サーバー側ですべての衝突検出を行う必要がありますか?または、クライアントに検出を行わせ、サーバーに何らかの方法でフォローアップさせる必要がありますか?サーバーが単独で行うには多すぎるように感じます(1台のサーバーで数百人のプレイヤー向けにエンジンを設計しています)。

誰もが主流のMMOがそれをどのように行うか知っていますか?現在、ほぼすべてのMMOが物理ハッキングの影響を受けやすく、通常、ハックを検出して人を禁止することで対処しています。少なくとも物理コンポーネントについては、ハックはまったく機能しませんでした。

回答:


21

明らかな答えは、検出のほとんどをクライアント側で実行すること(スムーズにするため)で、クライアントが遠すぎる場合はサーバーが言うことを補間するようです。サーバーは、クライアントよりも低い頻度(たとえば、10hzなど)でカチカチ音をたて、おそらく基本的な「このプレーヤーは、自分が現在の最後の既知の場所から来たと言っている場所に到達できるか」というコードを必要とします。ある種のナビゲーションメッシュタイプのソリューションと経路探索。

ニーズによっては、非常に遅くなる場合があります。たとえば、サーバー上のプレーヤー間衝突を気にしないように、設計上の決定を下すことができます。私の知る限り、ほとんどのゲームはクライアント側でもそれを気にしません。それは本当にあなたのニーズに依存します。

しかし、経験則では、クライアントを決して信用してはいけません。ゲームプレイに影響する場合は、少なくともサーバー上で検証する必要があります。


24

それで、ここでいくつかの答えがあります。

  • クライアント側の衝突は、パフォーマンスの観点およびプレーヤーの感覚の観点から理想的です。コリジョンを遅らせたくない、プレイヤーがソリッドオブジェクトにぶつかって停止したい、など。サーバー側でそれを行う場合、あなたはあちこちでラバーバンディングプレーヤーを見ているか、プレーヤーが移動しようとする際に顕著なラグを与えるかのいずれかです。どちらの場合も悪いモジョ。

  • サーバー側の衝突は、セキュリティの観点から理想的です。クライアントが「ダム端末」に近づくほど、ゲームは悪用されにくくなります。テキストベースのMUDをプレイする人が誰もウォールハックやスピードハックについて心配する必要がないのには理由があります-それは、クライアントが言及する価値のあることを何もしていないからです。

  • 両方を行うことは、ほとんどすべての場合に「理想的」です。クライアントに自分のことをさせてから、サーバーをダブルチェックして、だまされていないことを確認します。欠点は、複雑さ、同期(両者が一致しない場合は正確にをするか)、およびサーバーのCPU使用率です。

  • 私が推奨するのは、ほぼ完全にクライアント側で行うことです。クライアントは、完全なクライアント側システムと同様に、その位置について権限を持ち、すべて独自の処理を実行します。さらに、サーバーは時々ランダムにさまざまなプレーヤーをチェックします。サーバーの負荷を低く保ちますが、驚くほど速く不正行為者を根絶します。

または、今のところクライアント側でそれを行い、ゲームが人気を博して人々がだまされている場合は、将来のある時点でサーバー側の検証を追加します。正直なところ、おそらくそうではないので、コーダーに時間を費やす意味はありません。


3

World of Warcraftは、プレイヤー/ Mob間の衝突検出を行いません。この決定の背後には技術的な理由があるかもしれませんが、実際には、これは技術的な決定というよりもゲーム設計の決定でなければなりません。

プレイヤー対プレイヤーの状況でどれほど悪用できるか想像してみてください。または、他の(多くの場合アイドル状態の)プレイヤーがあなたの動きをブロックした場合、銀行/オークションハウス/メールボックスを使用するのはどれほど難しいでしょう!

クライアント対サーバーベースの衝突検出に関しては、実際、動きが非常に遅い場合を除き、主にクライアント側である必要があるため、各クライアントに正しく見えます。遅延/遅延衝突応答、および/または「見えない」オブジェクトとの衝突は非常に不快です。


1
問題は、プレイヤー対暴徒/プレイヤーの衝突が悪いゲームデザインかどうかではありませんが、すべてがしっかりしているダークフォールオンラインのようなゲームを見ることをお勧めします。ゲームプレイに新たな次元を追加し、ゲームで非常に興味深いことを行うことができます。プレイヤーがオブジェクトを開くために透けて見える小さな隙間が常にあるので、プレイヤーが私のゲームで銀行のようなものをブロックすることを心配しません。
BarakatX2

プレイヤーが攻撃する可能性のあるものや、攻撃できないものはすべて簡単に通り抜けることができるため、プレイヤーをブロックすることができます。たとえば、プレイヤーはMobを攻撃できるため、Mobを通り抜けることはできません。また、PVPにフラグが設定されているため、PVPにフラグが設定されている間は、プレーヤーを通り抜けることはできません。PVPのフラグが設定されていないプレーヤーは、PVPのフラグが設定されていないプレーヤーでも攻撃できません。
アザール

2

あなたがハッキングを心配していて、それがゲームプレイに大きな影響を与える場合、答えはイエスです。

「都市を構築する」種類のゲームであるブラウザーベースのゲームでは、保存されたゲームの状態をレイアウトするときにクライアントエンジンが失敗することはないため、ハッキングについては気にしません。

ただし、プレーヤーがゲームコイン(またはプレミアムキャッシュ)を使用してプレイエリアを拡張し、より多くの家/建物を建設する必要があるため、ゲームプレイを悪用する可能性があります。そこで、利用可能な無料のタイルの数に対して、新しく追加された建物が占めるタイルの数の簡単なチェックを実装します。

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