MMOでAIを計算するのは誰ですか?


30

MMOを構築していますが、NPCを追加したいです。問題は、基本的なデザインがわからないことです。計算、クライアントまたはサーバーは何ですか?サーバーがイベントと反応を計算することは理解できますが、経路探索とプレイヤーの位置と動きについては、だれが計算しますか?

サーバーまたはクライアントのAIを計算するのは誰ですか?サーバーが経路探索、位置、動きなどを計算することを想像できませんでした。私はこれを理解する助けが必要です、ありがとう、何でも助けます。


2
用語に注意してください-たとえば、NPCはプレイヤーではありません。
キロタン

回答:


25

最近のほとんどのMMOには、安全上の理由から、サーバー側で重要なことが行われています。クライアントに多くの負荷をかけることはできません。そのため、最初に悩まされるのはAIルーチンです。ほとんどの開発者は、例外としてではなく、クライアント側が一般的にハッキング可能であると考えています。

ScalifyのBadumna(http://www.scalify.com/badumna.php)は、クライアント側で計算を実行して相互に送信するという点で、クライアントの一部をオフロードしようとします。一部のデータは、専用サーバーのように、クライアントに渡される前に検証されるために信頼できるピアにも送信されます。問題は、不正行為を防ぎたい場合は、マルチプレイヤーゲームのすべてのデータを信頼できるピア経由で送信する必要があることです。Badumnaはあなたが望むものに最も近いように見えましたが、それでも詐欺師を捕まえることはできません-それはいくつかを捕まえるかもしれませんが、重要なもの(すなわち、すべて、ほとんど)はサーバーで行わなければなりません-側。

Badumnaを拡張することもあります。それはまだ役に立つと思われるためです(ただし、クライアントがチートするため、クライアントで重要なものをオフロードすることを再検討することをお勧めします)。

Badumnaは、データ操作のためのハイブリッドアーキテクチャを提供します。開発者は、重要なもの(検証する必要があるもの)とそうでないもの(分散ネットワークで送信できるもの)を決定する際に完全な制御を提供します。

MMOで情報のすべてのビットを検証する必要がある場合、Badumnnaはクライアント/サーバーソリューションとして機能します。ただし、要件が異なるMMOアプリケーションにはさまざまなカテゴリがあると思います。たとえば、MMOにはプレイヤーがチートする可能性が高い戦闘ゾーンが存在することが非常に多いため、すべての情報を確認する必要があります。ただし、プレーヤーが歩く、走る、ダンス、チャットすることしかできないゾーンもあります。そのようなゾーンは完全な検証を必要とせず、バドゥムナの分散ネットワークを利用でき、それが提供するスケーラビリティの恩恵を受けることができます。

次に、Badumnaは、ID保護(ユーザーが他人になりすますことができないように)、苦情プロキシ(悪意のある/不正なプレーヤーを信頼できるソースに報告するようにクライアントを構成できるようにする)、ブラックリストなど、開発者がアクセスできる追加のセキュリティ機能を提供します(悪意のあるプレイヤーをゲームから禁止する)。

Badumnaについてはあまり調べていないので、気付いていない問題や機能があるかもしれませんが、少なくとも大まかに一目見ました。

tl; dr:クライアントは、実際には単にインターネットに接続されたキーボードとマウスである必要があります。


9

簡単な答えは、標準のMMOの場合、AIの計算は常にサーバーによって実行されるということです。

一部のゲームでは、クライアントがAIを予測しようとするため、NPCがより迅速に反応するように見えますが、それは単なる幻想です。実際のNPCは常にサーバーによって制御されます。


5

MMOは、パブリック(インターネット)向けのサーバーです。完全に制御できるようにしたいものは誰もアクセスできないようにします。そうしないと、攻撃者がNPCを制御できるようになります。コマンドで何らかの暗号化を行っている(パフォーマンスに影響する)場合を除き、クライアントが独自のコードのみを実行していることを信頼することはできません。

クライアントでNPCの動きを予測して遅延を補正することは素晴らしい考えです。理論的には、クライアントプログラムに必要なだけAIの動作を含めて定期的に同期させることができますが、クライアントがNPCの動作を指示できるようにすることで、クライアントがゲームの世界を混乱させる可能性が与えられます。クライアントがサーバー上のゲームワールドから同期解除すると、制御不能な不正なNPCになってしまいます。

AIをクライアントに分散すると、スケーラビリティに影響を与える可能性があるため、これは本当に残念です。


2
暗号化はほとんど役に立たない-クライアントは送信されたものをすべて解読できる必要があり、クライアントをリバースエンジニアリングできます。せいぜい暗号化は、だましクライアントを作成する誰かを遅くします。
アダム

2

通常、サーバーは、クライアントとの間でやり取りされるすべてのデータを計算または検証する必要があります。しかし、それはあなたがクライアントをどれだけ信頼できるか、そしてその計算がどれほど重要かによる。主要な計算はクライアント上で実行でき、サーバーは簡単な方法を使用して結果データを検証できる場合があります。


1

検証が元の計算よりも簡単な場合(または、たまにスポットチェックを行うだけで詐欺師を捕まえることができる場合)、他の答えに基づいて、「オフロードと検証」戦略が実際に役立ちます。

たとえば、クライアントにA *パス検索を実行させ、結果をサーバーに送信した場合、サーバーはa)パスが有効であり、b)短いパスがないことを確認するだけです。パスの妥当性をチェックすることは簡単であるべきであり、最適性をチェックすることができ、あなたが今、上側あなたがチェックする必要があるパスの長さにバインドされているため、そもそも最適なパスを見つけることよりも簡単。(特に、クライアントが直線パスを返す場合、有効である限り明らかに最適です。)正直に言うと、この特定のトリックが実際に役立つかどうかはわかりませんが、根本的な障害はありませんそれに。

ただし、NPC AIをクライアントにオフロードすると、ハッキングされたクライアントがそれを使用してNPCの動作を事前に予測できる可能性があることに注意してください。一部の種類のゲームや状況では、これは深刻な問題になる可能性があります。


1

クライアント側で複雑なゲームクリティカルでない操作を処理しながら、サーバー側でいくつかの単純なAIルーチンとゲームクリティカルな計算を行うのがおそらく最善です。

たとえば、サーバーは敵対的なNPCがどこにあり、プレイヤーキャラクターがどこにいるかを知っています。プレイヤーキャラクターがNPCの範囲内に入ると、サーバー側の計算を行ってNPCがプレイヤーを攻撃するかどうかを確認できます。また、単純な経路探索ルーティングを実行して、NPCがプレイヤーに到達するまでの時間を決定できます。

NPCが攻撃状態に移行すると、クライアントはアニメーションときめ細かいパス検索を処理できます。NPCがサーバーに攻撃するのに十分なほどクライアントに近い場合、攻撃がヒットしたかどうか、ダメージが何だったかなどを計算することができます。

ゲームの結果に実際に影響を与える計算は、サーバーによって処理されてクライアントに渡され、重要でない計算はクライアントによって処理されるようにする必要があります。

最も単純なケースでは、クライアントがサーバーのあるべき場所と同期を保ち、サーバーが検証してから、クライアントが再度計算します。

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