9

私は、インテリジェントなパスファインディングを行うのではなく、障害物をスライドして、クリーチャーオブジェクトが環境内の他の任意のオブジェクトに向かって移動できるようにするシミュレーションを書いています。経路を計画させようとしているわけではありません。一般的な 1 つの方向に移動し、障害物を回避するだけです。

これは 2D 環境 (俯瞰) であり、すべてのオブジェクトには衝突検出用の境界四角形があります。グリッドはありません。私は A* ソリューションを探していません。

この種の「ばかげた」衝突ベースのパスファインディングに関するチュートリアルを見つけることができなかったので、最も一般的な用語を使用してこれを説明していない可能性があります。

これを実装する方法に関する推奨事項 (またはチュートリアルへのリンク) はありますか?

4

5 に答える 5

6

障害物回避についてギョームが言ったことを拡張すると、あなたにとってうまくいくテクニックは反重力運動です. ローカルの障害物を反重力の点源として扱い、目的地を重力として扱います。コンピューター制御のキャラクターは障害物を (石けんのように!) すり抜けて目的地に到達します。

于 2009-05-17T20:33:23.850 に答える
2

Pledgeのアルゴリズムを使用できるかもしれません

于 2009-05-17T16:25:28.440 に答える
1

ベクトル方向に移動するクリーチャーがvベクトルで表される方向の壁に衝突するたびにw、「スライド」する必要がある方向は、 への射影であるベクトルによって与えられvますw。これは、

  v . w
--------- w
 |w|*|w|

ここ.で、 はベクトル内積で、はベクトル( = )|w|の大きさです。が単位ベクトルの場合、これは単純になります。wsqrt(w . w)w

(v . w) w

得られたベクトルをクリーチャーの速度として使用すると、クリーチャーが壁を「かすめる」だけのときは速く移動し、ほぼ完全に壁にぶつかるときはゆっくりと移動することを意味します。(これは、ほとんどの一人称シューティング ゲームが人間のプレイヤーの衝突を管理する方法です。)

代わりに、クリーチャーを常に全速力で移動させたい場合はv . w、「壁が向いている方向 ( w) または反対方向 ( -w) のいずれかに常に移動する」という記号のみが必要です。

問題は、クリーチャーが壁にぶつかったときです。wその場合、射影されたベクトルは (0, 0) になり、どちらの方向 (または-w) に進むかを決定するには、他の手法が必要になります。ここでの通常のアプローチは A* ですが、環境に十分な構造がある場合は不要かもしれません。

于 2009-05-17T16:32:59.500 に答える
-1

しばらく前に C# で経路探索アルゴリズムを投稿しました

リンクはこちら

それを開始点として試してみることができます。つまり、次のセルをチェックして障害物をチェックするのが有効かどうかを確認する関数を変更し、開始点と終了点の代わりに小さな間隔でフィードすることができます。複数のミニパフ検索ルートのように。

(テキストはスペイン語ですが、上部のリンクからアプリケーションをダウンロードできます)

于 2009-05-17T16:05:49.737 に答える