AIエージェントを曲線に沿って移動させるにはどうすればよいですか?


12

現在、私の非常に基本的なAIフレームワークには、一連のポイントで構成されるギザギザのパスに沿って移動するエージェントがあります。

ナビゲーションパス

これは、ある地点から次の地点に位置を移動するだけです。次のポイントに到達すると、次のポイントに向かって移動します。曲線バージョンのパスに沿ってスムーズに移動するようにこれを変更するにはどうすればよいですか?また、曲線を生成するにはどうすればよいですか?


彼らはどうやって次のポイントを選ぶのですか?
FxIII

@FxIII申し訳ありませんが、私は以前このコメントを見ませんでした-新しい検索ターゲットをどのように選択したのですか、または検索の次のポイントをどのように選択したのですか?
サーヤカロット

回答:


4

何らかのパススムージングの後です。もちろん、bummzackが指摘したように、実行するパススムージングがエージェントの合法的な動きにつながることを確認する必要もあります。

この記事Gamasutraのは、パススムージング、リーガルターン、リアルでスムーズなターニングアルゴリズムなど、知っておく必要のあるほぼすべてについて説明しています。

もう少し簡単な方法は、小さな境界円/球でシーク動作を使用して、エージェントがパス内の次のポイントにあるか、それに近いかどうかを確認することです。


7

コントロールポイントは既にわかっているため、補間コードを更新するだけで、曲率のアルゴリズム(エルミートやコサインなど)を使用できます。

これらのサイトは、すぐに使い始めるための優れた説明とサンプルコードを提供します。

ポールバークの内挿法

Sol :: Tutorials-補間のコツ


さて、生成された曲線が突然障害物にぶつかった場合はどうなりますか?
bummzack

これは、フレームごとのエージェントの移動用です。同じ衝突検出アルゴリズムが引き続き適用されます。衝突が検出されたら、コントロールポイントを変更してオブジェクトを回避する(難しい)か、一時的に別の動作アルゴリズムを使用します。
ダグ。マクファーレン

@bummzackは良い点です、そして答えはナビゲーションメッシュを使用し、それに応じてカーブを滑らかにすることですが、今のところは単純なナビゲーショングラフでこれを動作させるので、スムージングのみでこれを解決しますパスを少し。
サーヤカロット

@bummzack:カーブパス生成アルゴリズムの上に障害物回避のためのステアリング動作を追加します。
imre

0

ここではグレインに反して、カーブを事前に生成するのではなく、(たとえば)ホーミング作成するために使用するのと同じロジックを使用して、フレームごとにカーブを処理することをお勧めします-ミサイル

これは、2つのポイント間に壁がある場合に特別なケースを必要とせず、通常どおり衝突検出を処理するだけなので、はるかに簡単で、おそらくより現実的です。

欠点は、動きが最適に見えないことです。オブジェクトは常に1つのウェイポイントから次のウェイポイントへの最も直接的なパスを取ります。つまり、スプラインとは異なり、ウェイポイント2を既に通過するまでウェイポイント3に向かって回転開始しません。状況に応じて、ウェイポイントを調整することで修正可能です(問題がある場合でも)。


1
これは基本的に私が提案したシーク動作です。
レイデイ

0

パスファインダはパスを提供する必要があり、変更しないでください。パスファインダーアルゴリズムを修正して、長いパスと短いパスで既に行っているように、急カーブのパスは滑らかなカーブのパスよりも大きくなることを考慮に入れることができると信じています。

深く考える瞬間を見つけられるなら、私はここにいくつかの解決策を投稿しますが、私はこれが進むべき道だと思います。

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