同じ場所に立っている敵を止める簡単な方法はありますか?


24

つまり、トップダウンゲームでは、敵がプレイヤーを追いかけます。一定の距離内に入ると、敵は静止して発砲します。それらがすべて同じ方向から来ている場合、私は現在敵間の衝突検出を行っていないので、それらはすべて同じ場所に立ちます(つまり、お互いの中に立ちます)。

これを回避する簡単な方法は何ですか?何らかの形の衝突検出またはAIのどちらか?


1
敵を1人に制限します。:P
カイロタン

回答:


18

衝突の検出は必要ありませんが、敵に少し知性を与え、敵が互いに走り回らないようにする必要があります。それなしの衝突検出は、とにかくあなたの敵を愚かに見せます-人はお互いを避けます、彼らは一般に衝突しません。

いくつかの簡単な動作については、「群れ」を調べてください。

基本的な考え方は、物事はプレーヤーの方に向かうべきであるが、近くの障害物(お互い、壁、そのようなもの)から離れるべきだということです。


6
ボイドとも呼ばれます。boidを取り巻く簡単なルールについては、こちらをご覧ください:en.wikipedia.org/wiki/Boids これらの制限を実装するのは簡単なはずです。
ネイラー

12

ボイドのような群れの振る舞いに自分を刺激することができます。

これらは、正しく適用され、非常に満足のいく「複雑に見える」動作をもたらす3〜4個の非常に単純なルールで構成される傾向があります。

あなたの場合、次のようなものを試すことができます:

  • 分離(敵間の最小半径)
  • 凝集力(グループで移動するため)
  • アライメント(したがって、同じ方向に移動する傾向があります)
  • ターゲットを絞った(プレイヤーに向かって移動する傾向があります)

これは、JasonDの答えのほぼ逐語的なコピーです。投稿する前に見なかったことを誓います。
エガルシア


3

協調的な拡散(ここでは素晴らしいアニメーション)または他の種類の動きに対する反オブジェクトパターンを確認することをお勧めします。拡散アルゴリズム自体は敵の交差を防ぐことはできませんが、追加の制約を追加して可能性を低くしたり不可能にしたりできます。


完全な開示:GDのどこかで共同の拡散リンクを見つけたのは確かですが、今のところそれを参照している投稿を見つけることはできません。それはかなり発見でした。=)
スリム

これはすごいことですが、必要以上に複雑になりました。とにかくホワイトペーパーを読みますが、よりシンプルなソリューションを実装することができました。
イアン

2

他のユニットの移動を許可しない場合はどうなりますか?遅かれ早かれ必要になると思います。現在のパスがユニットによってブロックされるたびに、パスを調整してその周りを移動します。


2

Craig ReynoldのWebサイトには、操縦および群れ行動に関するいくつかのリファレンスがあります。それらは実装が比較的簡単ですが、素敵な緊急行動を生み出すことができます。


これは基本的に他の2と同じ答えですが、リンクについては+1です-そのWebサイトは本当に良いリファレンスです。
AShelly

1

他のすべての答えはより良い結果を生成しますが、完全なグループ化を回避する最も安い(?)方法は、元の計算された移動ベクトルのおそらく25%であるランダムベクトルを追加して、オブジェクトが一般的なブロブグループで少し跳ね返ることです。物事を完全に切り離すことはできませんが、達成しようとしているものによっては、これで十分であることがわかりました。オブジェクトを円で囲むと、オブジェクトはこの方法でグループ化できますが、時間がたつと拡散する傾向があります。

この方法を実証する数年前に作成した小さなゲームレットは次のとおりです。http//deleter.phatcode.net/index.php?page = projects& p = 4


1

それは非常に良い結果を与えるため、人々は常にボイドを育てますが、ボイドを実装することはあなたの特定の目的のためにやり過ぎかもしれません。過去に、小さな円内のターゲット位置を単純にランダム化することで、非常に良い結果を得ました。

たとえば、Unityで作成したデモでは、コマンドRandom.insideUnitSphereを使用して、パフボールの群れを作りました。


1私は(重複しないのはおそらく少し良く保証付き)この戦略のもう一つの例は、ここで見つけることができ、同意する:RTSゲームで「のunclutter」ユニットを
MichaelHouse

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