大規模なネットワーク化された世界でエンティティのパス検索と移動を処理する方法


12

ここに画像の説明を入力してください32x32ボックスに分割されたタイルを使用した上記の画像を考慮すると、近くにいる近くのプレイヤーに「aggro」とマークされたエンティティがあります。このモンスターに理想的にはプレイヤーを追いかけたい(そしてしばらくの間プレイヤーを追い続けたい)。現在、私の唯一の動きは、リモートエンティティの単純な補間器で行われます。これは、動きの更新間のギャップがかなり小さいために機能します。

モンスターがいる位置に移動したいことをクライアントに伝えることができません。それはエンティティが本来よりもはるかに速く移動するためです(これはおそらく補間coに数学を使用して解決できます) -効果的)しかし、もっと重要なのは、現実的に見えず、壁をクリップする可能性があることです!回避できる場合は、サーバー上の動き全体をシミュレートしたくありません...できると思いますが、それでもクリッピングの問題は解決しません。解決策には、定期的なノード更新をパス検索および送信し、それらに動きをシミュレートさせることが必要ですが、確信はありません。

ありがとう!

回答:


9

簡単な開始のために、ステアリング動作を実装できます。特に行動を求めますここに画像の説明を入力してください

キャラクターを探すことに加えて、回避を使用して障害物から離れるべきです。

ここに画像の説明を入力してください

これらの側面が機能したら、さらにインテリジェントなフォローを実装できます。それには経路探索が含まれます。敵は敵に向かって操縦する代わりに、敵をターゲットに導く経路上の各ノード向かって操縦します

敵が「十分に近く」になると、完全にステアリング動作に切り替えることができます。パス検索よりも安価であるため、近距離で良い結果が得られます。

ステアリングを使用すると、敵の最大ターン速度と最大速度を定義することもできます。

サーバーからの定期的な更新を使用して、クライアントでステアリングを管理し、それらが引き続き順調であることを確認できます。


これは、サーバー上のステアリング動作もシミュレートすることを意味しますか、それとも論理的にパスに沿ってエンティティを「スナップ」できますか?私は大きな精度を必要としません。
ヴォーンヒルツ

ステアリングだけをシミュレートする必要があります(ただし、それほど重くはありません)。ただし、ウェイポイントへのステアリングは、シミュレーションなしで更新できます。クライアントが「現在の」ウェイポイントの範囲内にあり、その「次」として正しいウェイポイントに向かっていることを確認するだけです。エンティティが軌道から外れて突然更新された場合、これにはいくつかのスナップが含まれます。
マイケルハウス

グレートアンサーの場合は+1。数時間節約してくれてありがとう。
Md Mahbubur Ra​​hman

1

モンスターがいる位置に移動したいことをクライアントに伝えることができません。それはエンティティが本来よりもはるかに速く移動するためです(これはおそらく補間coに数学を使用して解決できます) -有効)

実際、これは簡単です。移動方向は、ターゲット位置から現在位置を引いたものになります。あなたがする必要があるのは、あなたが実際に望む移動速度にそのベクトルを縮小することです。すべてのフレームを繰り返します。

しかし、もっと重要なのは、現実的に見えず、壁をクリップする可能性があることです!回避できれば、サーバー上の動き全体をシミュレートしたくありません...

サーバー上の動きをシミュレートする必要があります。すべてのプレイヤーが同じ行動を見ていることを他にどのように知っていますか?

基本的な経路探索が必要になります。A *が標準です。ターゲットへのパスを計算し、そのパスをたどるのは、単に上記のように移動ベクトルを設定する場合です。(または、Byte56の答えのようにステアリング動作を使用することができます。これは、基本的にいくつかの追加機能を追加したものと同じです。)

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