タグ付けされた質問 「steering-behaviors」

2
宇宙船の動的スラスタバランシング
私のゲームの宇宙船は、任意の量のスラスタを任意の回転で任意の場所に取り付けてプレイヤーが構築することを意図しています。現在、船を所定の角度に回転させる(加速と減速)ための汚いコードがあります。 これは、赤い線が指す場所に面し、左に回転するように指示された対称的な船の例です。 しかし、ご想像のとおり、プレイヤーがスラスタをどこに置いたかによっては、望ましくない直線的な力が船に影響を与えることがあります。この場合、船は前進し始めます。 スラスタが線形速度を発生させないために適用できる最大推力を見つけることができるかどうかについて詳しく説明しています。(上記の場合、後部スラスタからの力に対抗するものが何もないため、それはありません。前部スラスタは互いに殺します)。 これまでに思いついたのは、「回転効率」を決定する式です。たとえば、直線運動に関連してどの程度の回転が発生するかです。 a-スラスタaへの位置ベクトルb-スラスタbへの位置ベクトルv1-スラスタaからの力v2-スラスタbからの力 EfficiencyDelta = a.cross(v1)/ | v1 | -(a.cross(v1)+ b.cross(v2))/ | v1 + v2 | 、基本的に「a.cross(v1 * t)/ | v1 |」ターン効率となるはずです。そして、新しいスラスタを発射する価値があるかどうかを確認するために、スラスタの回転効率を合わせて差し引きます。 スラスタがオン/オフになっているわけではないことを認識したときに問題が発生しますが、スラストを0から1に変えることができます。また、プレイヤーが船を前進させたい場合の対処方法 もちろん、回転/移動する量のバランスが必要です。 私はロケット科学者ではないので、各スラスタのスロットルをこのように計算し、正しい方向にプッシュすることが可能かどうかを教えてくれる人がいることを望んでいます。 お時間をいただきありがとうございます!/キム

2
携帯電話を別の方向に移動させるために、どのようなステアリング動作またはロジックを使用できますか?
ゲームでパスファインディングを使用して、暴徒を別のプレーヤーに誘導しています(追跡するため)。これはそれらをプレーヤーの上に乗せるために機能しますが、目的地の少し前に停止させたいので(最後から2番目のノードを選択しても問題ありません)。 ただし、複数のMobがモバイルを追跡している場合、「互いの上に積み重なる」ことがあります。これを回避する最良の方法は何ですか?モブを不透明でブロックされたものとして扱いたいわけではありません(そうでないため、ウォークスルーすることができます)が、モブに構造的な感覚を持たせたいです。 例: それぞれのヘビが私を案内し、「セツナ」を囲んでいると想像してください。両方のヘビが私を突き刺すことをどのように選んだかに注意してください?これは厳密な要件ではありません。少しずれていても大丈夫です。しかし、彼らはセツナを「取り囲む」べきです。

1
AIが目標に到達するために回転する正しい速度を見つける
私は最高速度で移動し、毎秒度maxSpeedを変えることができる船を持っていrotationSpeedます。船は常に向いている方向に移動します。つまり、船が速く移動するほど、旋回半径が大きくなります。 私は自分の位置、回転、ターゲットの位置を知っています。 私が理解したいのは、ターゲットがこの速度で私の回転半径内にあるかどうか、またはより良い、私が移動できる最大速度は、ターゲットを回り続けることなくターゲットに方向転換するためです。 これを行うための効率的な方法がありますか? これが私がこれまでに考えていることです。1ステップあたりの移動距離と1ステップあたりの回転量がわかっているので、次の2つのフレームのどこにいるのかがわかります。私の現在の位置はp1で、次の位置はp2、次にp3です。(p1、p2)と(p2、p3)の垂直二等分線をとることができます。彼らの交点は私に円の中心を与えます。次に、ターゲットがその円の中にあるかどうかをテストできます。 これが3Dで機能するかどうかは不明です(入力で球を計算する方法がわかりません)。この解決策は、旅行に適した速度を見つけるのにもあまり役立ちません。妥当な速度を見つけるには、さまざまな速度で数回試す必要があります。 誰もがより良い解決策にいくつかの光を当てることができますか?

3
操縦行動を追跡する際の周回の回避
私はその(静止した)ターゲットを追跡する(そして試みて影響を与える)行動を追跡するミサイルを持っています。 あなたがミサイルを発射するとき、あなたが機銃乱射していない限り、それはうまく働きます。あなたが機銃掃射している場合、ミサイルはその目標を周回する傾向があります。 最初にターゲットに接線方向に加速し、最初に速度の接線成分を削除してから、ターゲットに向けてビーラインすることで、これを修正しました。 したがって、vTがほぼ0になるまで-vTで加速します。次に、vNの方向で加速します。 それが機能している間、私はミサイルが最初に接線コンポーネントを明示的に殺すことなくターゲットに影響を与えることができるよりエレガントな解決策を探しています。

2
レースゲームでのオーバーステアリングの大災害を防ぐ
AndroidでGTA IIIをプレイしたとき、これまでプレイしたほぼすべてのレーシングゲーム(多分マリオカートを除く)で私を困らせていることに気づきました。直進は簡単ですが、カーブは本当に難しいです。車線を変更したり、誰かを追い越したりすると、車は前後に旋回し始め、修正しようとするとさらに悪化します。私ができる唯一のことは、ブレーキを踏むことです。これはある種のオーバーステアリングだと思います。 それがとても苛立たしいのは、現実には私には決して起こらないことです(ありがとう:-))、車内でのゲームの90%は私には現実的ではないと感じます(おそらく本当に良い物理エンジンを持っているにもかかわらず)。私はこれについて数人の人々と話しました、そしてあなたはレーシングゲームを「得る」か、そうでないかのようです。多くの練習をして、いくつかのゲーム(たとえば、Need for Speedシリーズから)で、非常に慎重に運転し、たくさんブレーキをかけて(そして、通常、指にけいれんを起こして)、ある程度うまくいくことができました。 ゲームデベロッパーとして、オーバーステアリングの共振による大惨事を防ぎ、運転を適切に感じさせるために何ができますか?(カジュアルなレーシングゲームの場合、100%リアルな物理学を目指しているわけではありません) また、スーパーマリオカートのようなゲームでは、オーバーステアリングがそれほど多くないように、まったく異なる動作をするのでしょうか。 一つの問題は、キーボードやタッチスクリーン(ホイールとペダルではなく)でプレイする場合、デジタル入力しか持っていないことだと思います:ガスが押されているかどうか、左/右に操縦しているかどうか、そして適切に操縦するのははるかに難しいです。与えられた速度。もう1つは、速度の感覚がよくなく、実際に(安全に)運転するよりもはるかに速く運転することです。私の頭の上から、1つの解決策は、ステアリング応答を速度に応じて変化させることかもしれません。

2
3D衝突回避:更新された速度ベクトルを見つける(「衝突速度」コーンの外)
私は現在、静的障害物(すべて球の形状)を回避することに焦点を当てており、飛行運動(6自由度)の完全3D衝突回避(ステアリング動作)システムのメカニズムを理解して実装しようとしています。 ただし、移動するエージェントの新しい速度ベクトルを理解する方法はわかりません。次の図は、シーンを示しています。移動するエージェント(緑)は、3つの静的オブジェクト(青)を操縦する必要があります。赤い線は、初期の前方速度ベクトルを表します。 また、3つの白/半透明の円錐があることに注意してください。これらは、各障害物に関する「禁止速度ベクトル」を表します。これは、エージェントの新しい前方ベクトルとして使用された場合に、エージェントが1つ以上の障害物と衝突することになる速度ベクトルのセットです(各コーンの半径は、指定された障害物の半径と等しいことに注意してください)プラスエージェントの半径。これにより、プレイヤーが操作できるようにオフセットを設定できます)。 このような3D環境で移動エージェントの新しい先行ベクトルを見つけるために、3つの障害を考慮して、単純なアプローチは、このよく引用される記事で説明され、次の2D画像で例示される古典的なソリューションを3Dに移植することです。 そこでは、新しい速度(オレンジ色の矢印)は、元の速度と障害物の中心との間の最小距離(黒い矢印)を正規化し、そのような法線に障害物の半径と移動エージェント。次に、各障害物について計算された新しい速度の平均が、最終的な速度の合計になります。 多くの場合、それで十分です。ただし、以下のケースを確認してください(視覚化を容易にするために2Dで例示)。 それらすべてにおいて、ナイーブなアプローチは衝突を引き起こします。aとbでは、最終的な新しい速度は元の速度(赤い矢印)と一致し、移動中のエージェントは部分的または完全にブロックされているにもかかわらず前進します。c)とd)では、新しい速度(オレンジ色の矢印)でも同じ結果になります。 だから、私の質問です:衝突を回避する方法で3つの障害を考慮して、そのような3D環境で移動エージェントの新しい前方ベクトルを見つける最も計算効率の良い方法は何ですか?または、言い換えると、次のような新しい先行ベクトル: 1)コーンの内部にない。 2)は、元の前方ベクトルに最も近い(図の赤い線)。 PS:できれば、私は図書館を探しているのではなく、その方法を学びたいと思っています。

2
モバイルでの経路探索と衝突回避
現在、モバイルプラットフォーム(iphone5 +)用のDiabloのようなゲームを開発しています。 単純なA *検索でパスが見つかりますが、衝突回避を考慮する必要があります。 同時に約50体のモンスターが活躍するので、パフォーマンスは非常に重要です。 私はうまくいくかもしれないいくつかの方法を見つけました。 NavMesh + RVO リキャスト/迂回ライブラリが上うまく機能pathfinding部分が、その群衆シミュレーションは、迅速(30の物質については5ms以上)の限界に達します。 別のライブラリRVO2は問題ないようです(50エージェントで2ミリ秒未満)。ただし、ライブラリにはライセンスの問題があります。 フローフィールド +物理エンジン 多くのRTSゲームはこの方法を使用していますが、衝突を解決するには物理エンジンが必要なようです。多くのエージェントが共通の目標を共有していない場合、この方法は従来のA *パスファインディングよりもコストがかかる可能性があります。 ステアリング動作 +物理エンジン ステアリング動作には多くの概念が含まれていますが、機能するsimple avoidance behavior可能性はあると思います(正面に何かがある場合は左/右に曲がるだけです)が、この方法でも物理エンジンが連携する必要があります。 どちらを使用するかはまだわかりません。おそらく他のパスファインディングと衝突回避の方法が存在します。 PS Halo:Spartan StrikeはHavok AI(RVOベース?)を使用しますが、そのゲームには多くの敵がいなかったので、最初の方法(NavMesh + RVO)がモバイルプラットフォームでうまく機能するかどうか疑問に思います。

3
RecastNavigationで、宛先に到達した後にエージェントをアイドル状態にするにはどうすればよいですか?
この質問は、特にRecastナビゲーションライブラリの取り扱いについてです。 でエージェントを追加し、addAgentそのターゲットをで設定しましたrequestMoveTarget。エージェントが宛先に到達すると停止しますが、(別のエージェントによって)押し出されると、ターゲットに戻ろうとします。代わりに、それを停止してアイドル状態にしたいので、他のエージェントがそれを脇に押して歩いたときに、元に戻らないようにします。 (エージェントが目的地に到達したかのように)近くにいることを求めてみresetMoveTargetましたagent.nposがagent.targetPos、それは群衆シミュレーションの内部ロジックを壊しているようです-エージェントは古い方向に歩き続けるだけで、止まることはありません。 RecastNavigationでエージェントを停止してアイドル(まだプッシュ可能)になるように適切に指示するにはどうすればよいですか?

2
壁回避ステアリング
レイノルズボイドアルゴリズムを使用して小さなステアリングシミュレータを作成しています。次に、壁回避機能を追加します。私の壁は3Dであり、そのような2つの点を使用して定義されています。 ---------. P2 | | P1 .--------- 私のエージェントは速度、位置などを持っています... エージェントを回避する方法を教えてください。 Vector2D ReynoldsSteeringModel::repulsionFromWalls() { Vector2D force; vector<Wall *> wallsList = walls(); Point2D pos = self()->position(); Vector2D velocity = self()->velocity(); for (unsigned i=0; i<wallsList.size(); i++) { //TODO } return force; } 次に、boid関数によって返されるすべての力を使用し、エージェントに適用します。 私は自分の壁でそれを行う方法を知る必要があるだけです。 ご協力いただきありがとうございます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.