ハック&スラッシュゲームでキャラクターを動かすための良いテクニックを探しています


51

ハック&スラッシュゲームを作っているので、たとえばTorchlight、Diabloなどでキャラクターを動かしたいです。現在、フロアのすべての歩行可能な領域にノードのセットを生成しています。どこかをクリックすると、プレイヤーはノードの補間パスを通過します。これはあまり自然に見えません。プレイヤーはロボットのように動きます。敵もこのノードシステムを移動に使用し、同じ問題を共有していますが、もう1つ問題があります。敵がプレイヤーを発見すると、彼らは最短距離で彼に向かいます。時々、彼らは同じパスを使用し、プレイヤーを囲むのではなくプレイヤーに並ぶことがあります。敵に異なる経路を選択させ、プレイヤーを囲む方法を知りません。この問題を解決する方法を知っていますか?キャラクターの動きに別のアプローチを使用すべきでしょうか?


私の現在のテクニック:

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


懐中電灯のスクリーンショット:ここに画像の説明を入力してください

- -更新 - -

これらの状況に対処する方法を知りたい:

状況1、途中で動的/静的な障害が発生する

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

状況2、敵にはプレイヤーへの道があります(私たちと戦うためにキューに入ります) ここに画像の説明を入力してください


10
図とスクリーンショットの+1(および良い質問)。常に便利です。
共産主義のダック

これは素晴らしい質問(+1)であり、この課題に対処するさまざまな方法(ルート、AIなどを変更するためのランダム化された影響)について、多くの議論と提案があることを願っています。
ランドルフリチャードソン

1
AIを作成するときにスコアリングシステムを使用することをお勧めします。各敵のスコア(たとえば、プレーヤーに到達するまでの時間)に応じて、特定の行動を与えることができます。たとえば、8つのMobがプレーヤーを攻撃できる最大の場合、最初の8つのMobよりも高いスコアを持っているMob は、プレーヤーへのより長いパスを故意に見つけようとして、よりインテリジェントに見えます。
ジョナサンコネル

私はまだ答えを探していますが、ナビゲーションメッシュ上の障害(動的/静的)にどのように対処できますか?、リキャストを使用できません-piotrek 11
17:23

回答:


24

ナビゲーションデータ構造と組み合わせたステアリング動作

これを行うにはいくつかの方法がありますが、それが基本的な概念です。ナビゲーションメッシュを使用する方が簡単な場合があります。これにより、各凸セクション内にパス検索を適用できます。

グラフを維持したい場合は、ノードからノードへのパスを厳密にたどるのではなく、パス内の各ノードに対してシーク動作を使用できます。

使用できるもう1つの方法はパススムージングですが、これはかなり計算コストが高いことを覚えておいてください。

お役に立てば幸いです。

編集:

障害物回避の問題を解決するには、何らかの障害物回避を使用します。


回答のためのThx、ナビゲーションメッシュを生成する方法を知っていますか?それとも他の方法がありますか?私のマップは、シームレスな床(四角/三角形)で作成されています。
ピオトレック

1
ナビゲーションメッシュの生成には、常にリキャスト(code.google.com/p/recastnavigation)を使用できます。「三角形のスープ」(ポリゴンの束)を与えるだけで、自動的に生成されます。
レイ・デイ

私はこれに遭遇する唯一の人ですが、リンク:ai-blog.net/archives/000152.htmlは死んでいます。実際に私はアクセスwww.ai-blog.netすることはできません
123iamking

3

他の人が示唆しているようにナビゲーションメッシュに切り替えるのではなく、ノードグラフに固執する場合は、特定の方向から攻撃するように各敵を割り当てることで、「プレイヤーを囲む代わりにプレイヤーに並ぶ」問題を解決できます。

これを実現するには多くの方法がありますが、私は通常、「トークン」システムを使用して、モンスターに一意の方向を割り当てます。プレイヤーオブジェクトは、方向(北、北東、東など)ごとに1つのトークンを所有します。敵がプレイヤーにパスしたい場合、まず敵からトークンを取得する必要があります。トークンで指定された方向は、モンスターにプレイヤーのどちら側に経路探索を許可するかを伝えます。プレイヤーは各方向にトークンを1つしか持たず、モンスターは攻撃する前にトークンを必要とするため、複数のモンスターがすべてプレイヤーの同じ側に進もうとすることはありません。

さらに、パスを見つけるプロセス中にノードに小さなペナルティを適用して、モンスターが持っているトークンと一致する方向からモンスターが近づくように奨励することもできます。(つまり、モンスターが東から攻撃できるトークンを持っている場合、そのモンスターの「最短パス」を決定するために、プレイヤーの北/西/南にあるパスノードをあたかも扱います1つではなく、複数のノードです)。これにより、単一ファイルでプレイヤーに向かって行進し、最後のステップでのみ拡散するのではなく、モンスターをより速く分離させ、プレイヤーの側面を狙います。


2

基本的に敵に対して行うことは、マクロレベルでパスファインディングを行い(凸領域の生成とプレイヤーがいるエリアへのパスについて考えてください)、マイクロレベルでボイドスタイルのステアリング動作を行うことです(閉じたら)プレーヤーに)。

boidの動作の例を次に示します。http//www.red3d.com/cwr/boids/

プレイヤーの場合、トーチライトはクリック/ドラッグした場所のナビゲーションメッシュ上でパスファインディングを行うと思います。直接制御よりも少し切断されているように感じるかもしれませんが、プレーヤーにとってより良い結果につながります。


しかし、たとえば階段ではどうでしょうか?敵も私を攻撃することができます。別のナビゲーションメッシュにしますか?
ピオトレック

それはnavメッシュの一部である必要があり、それ自身の凸形状です。
テトラッド

1
別の方法として、ポイントツーポイントのパスを使用し続け、「接近」すると物理ベースのステアリング動作にフォールバックできます。
テトラッド

ナビゲーションメッシュの動的な障害に対処するにはどうすればよいですか?
ピオトレック

1
ここではリキャストがそれを処理に取り組んでいる方法についてのブログ記事です:digestingduck.blogspot.com/2011/03/...
テトラッド

1

実世界の経路探索問題に使用されるrrtという名前のアルゴリズムがあります。ヒーロー(または敵)が歩くことができる表面は、オブジェクトが移動できる表面と一緒の入力であり、最適化アルゴリズムを使用して目的地へのパスを見つけます。私が知っている限り、このアルゴリズムはロボカップリーグで大いに使用されています。高速で、最短経路を見つけて、衝突や急な曲がりを避けます。このパワーポイントショーを使用して、パスの生成方法を把握できます。


詳細を見ると、私が提供したプレゼンテーションはrrtが何をするのかを伝えるだけでなく、新しいアプローチを提案しているようです。
Ali1S232

0

経路探索ルートをより「リアルに」見せるために、Game Programming Gems Vol.1の自然に見えるA *に関する記事をチェックすることをお勧めします。

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