MMOでサーバー側のすべてのオブジェクトの座標を保存する


12

MMORPGの場合:

衝突を検出するために、すべての木、茂みなどの座標をサーバー側に保存することは一般的ですか?

もしそうなら、そのような膨大な数の座標(データ構造など、パフォーマンスの問題の処理)を保存するための実行可能な方法は何でしょうか?

そうでない場合、このタイプの衝突検出は完全にクライアント側で行われ、サーバーはまったくチェックしませんか?

または、クライアントが衝突をチェックし、サーバーが検証するという中間的な状況がありますか?もしそうなら、サーバーも同様にサーバー内の座標を維持せずに同じことを検証しますか?


2
これについて十分な答えが得られませんが、クライアント側でのみ衝突検出を行うと、不正行為者はすべてを切り抜ける方法を見つけるか、数マイル離れたパワーアップを拾います。
ピートル

2
-1「質問は研究努力を示さない」。
クール


実際には、おそらくない複製は、私は他の質問は持っていなかった空間分割方式および空間データ構造について学んだ
Sajith Dilshanジャマール

回答:


15

実現可能性とは無関係に(はい、規模に応じて)、多くの場合、より良いまたは簡単な方法があります。

たとえば、一般的なMMOでは、サーバーはAIとプレイヤーの経路探索で使用される粗いナビゲーションマップについてのみ知る必要があります。ツリーの場所を保存する代わりに、ツリーの場所でnavmapに穴を開けることができます。他の大きな障害物についても同様です。

より詳細な衝突検出が必要なゲームであっても、多くの場合、これをサーバー側とクライアント側の検出に分けることができます。クライアントはよりアニメーションに敏感な衝突検出を処理する一方で、サーバーは粗雑なパスにのみ関心を持つことができます。たとえば、負傷したプレーヤーは、敵から隠れ場所を見つけるために大きな岩に沿ってcraい回ろうとします。サーバーは、プレーヤーが(サーバーが存在していることは考えていない岩のエッジに沿って移動することができると判断しているクライアントは岩が存在していることを知っている間、プレイヤーがunpathableエリアの隣に取ることができますパスがありますだけという、岩を)そして、キャラクターが歩くときに岩に自分自身を支えるアニメーションを再生します。クライアントは動いていないことに注意してくださいこの場合、キャラクターまたはインパクトのあるゲームプレイ。近くのオブジェクトにアニメーションで反応するだけです。

サーバーに多数のオブジェクトを保存できます。オープンワールドのゲームと違いはありません。適切な空間パーティションスキームを使用し、オブジェクトのメモリフットプリントをできる限り軽く保ちます。ここでは頭に「大きな数字」の異なるバージョンがあるかもしれないことに注意してください:ゲーム内の小さな小石や岩の多いバンプを個別のオブジェクトとして保存することを意味する場合、それはシングルプレイヤーゲームでも愚かです。:)


7

はい-それは実現可能です。MMOは多くの場合、ゲームの世界を複数の領域に分割します。これにより作業が簡単になりますが、1つの大規模な領域でそれを行うことができます。適切な空間分割スキームを使用するだけです。

MMOのほとんどのオブジェクトは移動しないため、オブジェクトを使用して衝突チェックツリーを作成する前処理パスを実行することもできます。

ここでは、インスタンス化を使用する限り、メモリフットプリントは大きな問題ではありません。オブジェクトごとにいくつかのフロートを保存することは、物事の壮大なスキームでは何もありません。最近の控えめなPCには4ギガバイトがありますが、位置の格納はわずか3フロート(または3ダブル)です。これにより、ゲーム内で数百万の格納オブジェクトを簡単に使用できます。

各プレイヤーのインベントリなどを保存すると、間違いなくより多くのデータが使用されますが、ディスクに簡単にキャッシュでき、プレイヤーがログインしたときにのみロードできます。

クライアントだけでなくサーバーに対しても衝突チェックを冗長に実行する必要があります。これにより、クライアントは環境により敏感に反応できるようになります。プレイヤーが壁に足を踏み入れた場合、サーバーが応答してから0.5秒後にではなく、すぐに移動を停止する必要があります。

権限のあることにもサーバーを使用したいだけです。たとえば、クライアントでのみパス検索を実行します。これは、効率の悪いパスを選択してもチートできないためです。


空間partioningスキームについてのヒントのためのおかげで、私は何か新しいことを学んだ
Sajith Dilshanジャマル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.