タグ付けされた質問 「collision-detection」

衝突検出とは、ゲームプレイ中に2つ以上のエンティティが互いに接触するかどうかを決定することです。

5
Unity:親スクリプトから、子オブジェクトで発生する衝突を検出する方法は?
私はこの構造で敵を持っています 敵 体 頭 左腕 右腕 等々。 体の各部分にコライダーも持っています。「敵」オブジェクトにスクリプトを添付しました。そのスクリプトで、身体、頭、腕、左などの衝突(弾丸)の可能性を遮断したいと思います。 これを行う方法はありますか?

1
空間ハッシュよりも四分木が望ましいのはいつですか?
同時に多くのオブジェクトを含む2Dプラットフォーマーを作成しています。これらはすべて、AABB衝突が検出されたものです。チェックするオブジェクトの数を減らすために最初に四分木を試し、いくつかの異なる構成を試しましたが、必要なほど効果的ではありませんでした。私は空間ハッシュを実装しましたが、それはより効率的です。各衝突をチェックするオブジェクトの数は劇的に減少しました。 空間ハッシングよりもクワッドツリーを使用して2D衝突検出を行うことが望ましい場合はありますか?私のテストによると、空間ハッシュは常に衝突のテスト対象となるオブジェクトが少なくなるように思われますか? 私はアルゴリズムでタイミングをとっていませんが、たとえばCでコーディングしている場合、ハッシュは非常に高価であるか、実装するのが難しいですか?注目に値するのは、私がゲームをJavaScriptで書いていることです。この場合、ハッシュは「無料」です。 ここに比較があります、何か見落としましたか?http://zufallsgenerator.github.io/2014/01/26/visually-comparing-algorithms/

2
レイキャストカーホイールが横にスライドしないようにするにはどうすればよいですか?
この記事を参考にして、非現実的な自動車物理エンジンを学習課題として書いてきました。 私は、地形に正しく衝突し、各車輪に正しいサスペンションフォースを適用する車を持っています。私の次の問題は、車輪の横方向の動きを防ぐことです。たとえば、斜面に車を落とすと、横に滑るようになり、横に滑るのを止めることはありません(いかなる摩擦もないため)。 リンクされた記事では、「サイドフォース」を適用し、フォワードフォースと組み合わせる必要があると記載されていますが、そのサイドフォースの計算方法については説明されていません。 各ホイールの衝突情報(交差法線など)と車の剛体に関する情報を考慮して、横向きの動きを防ぐために剛体に適用する適切なサイドフォースを計算するにはどうすればよいですか?

4
プレーヤーをスムーズに階段に登らせる
私は2Dプラットフォームのゲームを持っています。プレイヤーは常に右側に走りますが、地形は常に水平ではありません。例: プレイヤーボックスと他のブロックとの交差をチェックするだけで境界ボックス衝突システムを実装しました。大きなブロックに遭遇した場合にプレイヤーが実行されないようにして、ジャンプする必要がありますが、階段を置くときは、水平な地面と同じようにスムーズに走ります。衝突システムでは、階段を飛び越えて通過する必要があります。 階段の端の間に線を引いて、その線にプレイヤーの動きを課すことを考えました…どう思いますか?もっと賢いことはありますか?

2
どのようにすれば、攻撃者は攻撃者だけを攻撃し、攻撃者は攻撃者を攻撃するだけですか?
私のゲームには、さまざまなタイプの善人とさまざまなタイプの悪者がいます。それらはすべてお互いに発射体を発射しますが、どちらのアラインメントでも偶発的な付随的な損傷が発生することは望ましくありません。そのため、悪者は他の悪者を打ったりダメージを与えたりしてはならず、善人は他の善人を打ったりダメージを与えたりすべきではありません。 私がこれを解決することを考えている方法は、Unitインスタンス(これはjavascript、btw)がまたはのalignmentいずれかのプロパティを持つようにすることです。そして、衝突が起きるのは、goodbad class Attack boolean didAttackCollideWithTarget(target) return attack.source.alignment != target.alignment and collisionDetected(attack.source, target) もちろん、これは疑似コードです。 しかし、私がこの質問をしているのは、Unitクラスにさらに別のプロパティを追加する以外に、これを設計するはるかにエレガントな方法があるかもしれないという感覚を得ているからです。

1
UnityのOnCollisionEnterで表面の法線が得られないのはなぜですか?それらを取得する最も信頼できる方法は何ですか?
Unityのonコリジョンイベントは、発生したコリジョンに関するいくつかの情報を提供するCollisionオブジェクトを提供します(ヒット法線を持つContactPointsのリストを含む)。 しかし、得られないのは、衝突したコライダーの表面法線です。これは説明するためのスクリーンショットです。赤い線はからContactPoint.normal、青い線はからRaycastHit.normalです。 これは、簡素化されたAPIを提供する情報を隠すUnityのインスタンスですか?または、標準の3Dリアルタイム衝突検出技術でこの情報が収集されないのですか? そして質問の2番目の部分について、衝突の表面法線を取得するための確実で比較的効率的な方法は何ですか? レイキャスティングによって表面の法線が得られることはわかっていますが、これをすべてのシナリオで実現するには、いくつかのレイキャストを行う必要があるようです(接触点と通常の組み合わせで最初のキャストのコライダーが欠落するか、すべての平均を行う必要があるかもしれません)最良の結果を得るための接触点の法線)。 私の現在の方法: Collision.contacts[0].point通常のヒットに沿ってバックアップします 否定ヒットダウンレイキャスト通常のためfloat.MaxValueに、Collision.collider それが失敗した場合、通常の否定されていない状態でステップ1と2を繰り返します。 それが失敗する場合は、ステップ1〜3を試してください。 Collision.contacts[1] 成功するまで、またはすべての接点がなくなるまで4を繰り返します。 あきらめて、戻りVector3.zeroます。 これはすべてをキャッチしているようですが、これらすべてのレイキャストは私をうるさくします、そしてこれが十分なケースで機能することをテストする方法がわかりません。もっと良い方法はありますか? 編集 これが本当に3Dコリジョンでの方法である場合、一般的な場合の理由の概要は、Unityに固有の何かと同様に歓迎されます。

2
Microsoft XNA Platformerの例、衝突検出は正確に実装されていますか?
Microsoftが提供する例では、衝突の検出(私が確認できることから)に小さなエラーがあるようです。ユーザーが通過不可能なタイルと衝突すると、交差の深さが計算されます。奥行き値XとYの小さい方を使用してユーザーの位置を固定し、タイルと衝突しないようにします。しかし、ユーザーが斜めに移動している場合、これにより、ユーザーが最初にタイルと最初に衝突するポイントに正確に到達しない可能性がありますか? 私はおそらく間違っているが、それは私がそれを見る方法に過ぎない。 private void HandleCollisions() { // Get the player's bounding rectangle and find neighboring tiles. Rectangle bounds = BoundingRectangle; int leftTile = (int)Math.Floor((float)bounds.Left / Tile.Width); int rightTile = (int)Math.Ceiling(((float)bounds.Right / Tile.Width)) - 1; int topTile = (int)Math.Floor((float)bounds.Top / Tile.Height); int bottomTile = (int)Math.Ceiling(((float)bounds.Bottom / Tile.Height)) - 1; // Reset …

3
スローモーションでの衝突を計算的に緩和していますか?
多くのレーシングゲーム(たとえば、バーンアウトパラダイス)では、衝突が発生しようとすると、ゲームのプレイは自動的にスローモーションに切り替わり、衝突が完了するまでスローシーケンスで続行されます。 これは効果のためだといつも思っていました。衝突の一部を見逃したくない!しかし、私の友人の1人は、衝突が発生したときに必要とされる処理の圧倒的な速度がないことを確認するためにこれが行われることを最近提案しました。 今、私はそれが実際には逆だと思います。衝突が発生すると、多くの詳細がスローモーションで表示されるため、コンピューティングとレンダリングのパイプラインにオーバーヘッドがあると確信しています。 何が正しいですか? スローモーションシーンは、CPU / GPU使用量を増やしますか、それとも減らしますか?

3
衝突を増やすことなく衝突オブジェクトを分離する方法
すべてのオブジェクトを移動して衝突をチェックする単純な離散衝突検出システムを使用するとします。衝突するオブジェクトを(もちろん)分離し、適切な応答速度(バウンス、スライド、停止など)を割り当てます。 衝突するオブジェクトのペアがある場合、片方または両方のオブジェクトが他のオブジェクトと衝突することにならないように、オブジェクトを分離するにはどうすればよいですか?

3
高速で正確な2D衝突検出を実装するにはどうすればよいですか?
2つ以上の2Dオブジェクトが衝突しているかどうかを検出する方法はよく知っていますが、衝突をチェックするかどうかを決定する方法に興味があります。以前のプロジェクトでは、すべてのオブジェクトを他のすべてのオブジェクト(O(n ^ 2)レベルの愚かさ)に対してチェックしただけで、滑らかではないゲームプレイが作成されました。 さまざまなフォーラムが、クワッドツリー、Bツリー、および他のあらゆる種類のツリーや構造を思いつくことができます。 衝突をチェックするかどうかを決定するための最も効率的な構造は何ですか?

5
空間ハッシュと四分木に代わる2D空間分割
私はゲームに空間分割アルゴリズムを実装しようとしましたが、空間ハッシュと四分木の両方が私が探しているものではありません。 私のレベルサイズには制限がないことになっています(Int32制限のみ)。「レベル幅」と「レベル高さ」を必要としない空間分割アルゴリズムが必要です。 動いている物体がたくさんあります。500以上のオブジェクトをサポートできるほど高速なアルゴリズムが必要です。 代替案はありますか?



3
等尺性衝突検出
2つのアイソメトリックタイルの衝突を検出しようとすると問題が発生します。 タイルの各ポイント間のラインをプロットしてからラインインターセプトを確認しようとしましたが、機能しませんでした(おそらく間違った式が原因です)。 今日しばらくこれを調べた後、私は多くのことを検討していると思います。もっと簡単な方法があるはずです。 私はコードを探していませんが、オーバーラップの検出を達成するための最良の方法に関するいくつかのアドバイス

1
サークルライン衝突検出問題
私は現在ブレイクアウトクローンを開発しており、ボール(円)とレンガ(凸多角形)の間の衝突検出が正しく機能するようにするための障害にぶつかっています。私は、各線が凸多角形ブリックのエッジとエッジを表すサークルライン衝突検出テストを使用しています。 ほとんどの場合、Circle-Lineテストは適切に機能し、衝突点は正しく解決されます。 衝突検出は正しく機能しています。 ただし、ボールが実際にレンガと交差しているときに、負の判別式が原因で衝突検出コードがfalseを返す場合があります。 衝突検出に失敗しました。 私はこの方法の非効率性を認識しており、軸合わせの境界ボックスを使用して、テストされたレンガの数を削減しています。私の主な懸念は、以下のコードに数学的なバグがあるかどうかです。 /* * from and to are points at the start and end of the convex polygons edge. * This function is called for every edge in the convex polygon until a * collision is detected. */ bool circleLineCollision(Vec2f from, Vec2f to) { Vec2f lFrom, …

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