パスをスムーズにたどる


9

私は現在、敵が従う静的な所定のレーンを使用して2Dタワーディフェンスゲームを作成しています(つまり、タワーはパスをブロックできず、パス検索は解決しようとしている問題ではありません)。

私は、ユニットがこのレーンをスムーズに進む方法を正確に理解しようとしています。私はこれを行う方法について2つの大まかなアイデアを持っていますが、実装が容易である/より標準的なテクニックである可能性が高いいくつかの入力が好きです。またはもちろん、まったく考えていない方法がいくつかある場合は、それについても学びたいと思います。

ウェイポイント: 私の最初のアイデアは、パスを一連のハードコードされたウェイポイントとして定義することでした。次に、ユニットは基本的な「シーク」ステアリングアルゴリズム(このアルゴリズムなど)を使用して、パスに沿った各ウェイポイントに連続して移動します。しかし、ユニットが私が従うべきレーンから大きく逸脱しないようにするのは難しいのではないかと思いました。十分に鋭く曲がることができないと、希望のレーンから「滑空」する可能性があるのではないでしょうか。比較的強い操舵力をかけることでそれを防ぐことができるのではないでしょうか?

ベジエ曲線: 私が検討した2番目のソリューションは、ベジエ曲線でパスを定義し、各タイムステップでユニットの現在の位置から(dt *速度)離れた曲線に沿ったポイントを計算することです。このテクニックを使用すると、ユニットがたどるパスを正確に定義することがはるかに容易になると思いますが、これを実装する方法を正確に知ることはできません。助言がありますか?

また、これで誰かの答えが変わることはありませんが、ユニットはパスに沿って一定の速度で移動できなければなりません。さらに、私はpygletフレームワークを使用してこのゲームをpythonでプログラミングしています。

質問について不明な点がある場合はお知らせください。

編集:また、その価値にかかわらず、私は王国ラッシュでの敵の移動行動を再現しようとしています。


関連:gamasutra.com/view/feature/131505/…タイルを基準にしてどのような単位密度/サイズを使用していますか?
サル

その記事を見てみましょう!私は実際にはタイルを使用していませんが、位置を指定するために連続座標を使用しています。ユニットが移動するプレーヤーを示す静的な背景画像があります。
プノサウルス2013

私も見つけました。gamedev.stackexchange.com/questions/26543/…A *は非グリッドマップで機能します。同様の方法で湾曲する王国のノードパスである可能性があります。
サル

敵をパスから離して、そこに戻らなければならないものはありますか?あなたのベジェ曲線の提案にはないことが示唆されているので、私は尋ねます。その場合、パス全体について任意のデータを事前計算できない理由はなく、「AI」ロジックは必要ありません。
ケビンリード

回答:


8

Craig Reynoldsの著名な自律キャラクターのステアリング動作に関する論文を紹介します。読んでいない場合は、このような種類の問題を検討するのに役立ちます。特に、パスファインディングに関するセクションをご覧ください

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

Reynoldsの論文のアイデアは、単純な力を組み合わせて使用​​することで、環境の周りに生きているような即興的なナビゲーションを生成できるということです。動きは、経路計画やグローバル計算に基づいていませんが、代わりに隣人の力などのローカル情報を使用します。これにより、理解と実装が簡単になりますが、それでも非常に複雑な動きのパターンが生成されます。

このアプローチの優れた点は、いくつかの動作を組み合わせることができることです。したがって、たとえば、あなたのキャラクターは、パスを見つける動作と分離動作(それらがあまりに固まらないようにするため)の両方を持っている可能性があり、これらは重み付けされた合計として組み合わせることができます。

ステアリング動作を使用するもう1つの利点は、さまざまな言語で既存のオープンソース実装が数多く存在することです(たとえば、opensteer)。


更新:私はキングダムラッシュを見て、「スムーズに」の意味を誤解したかもしれません。もっと生き生きとした意味だと思いますが、あとはキャラが電車に乗っているような感じです。また、もっと注意深く読むと、「ユニットはパスに沿って一定の速度で移動できなければならない」という要件の1つであることがわかります。ステアリング動作は一定の移動速度を提供するものではありませんが、ウェイポイントと組み合わせた単純なパスファインディングが提供します。(つまり、ウェイポイントに到達するために「シーク」動作を使用しないでください。代わりに、方向ベクトルを決定し、ユニットをそのウェイポイントまでフルスピードで移動させます。)より多くのウェイポイントを使用してルートを滑らかにします。


2

このGamasutra記事の解決策は、あなたが探しているものかもしれません。基本的な考え方は、現在のウェイポイントの2ステップ先のウェイポイントにレイをキャストし、セルの長さの一部をレイに「ステップ」し、レイの「ステップ」ごとにレイをチェックして、プレーヤーのコリジョンボリュームが何かと衝突するかどうかを確認します。光線の階段状の位置。レイが2ステップ先のウェイポイントに到達した場合、中間のウェイポイントを取り除くことができます。その後、「ゴール」ウェイポイントまでこの同じプロセスを続けることができます...したがって、パスがゴールまでの直線で達成できる場合、ゴールまでの直線は、キャラクターがたどるルートです。こちらが記事です:http : //www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding

また、回転半径やより自然な回転動作などの優れた点も含まれています...

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