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

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

5
2Dロープ衝突検出
次のyoutubeビデオのように、オブジェクトと衝突できるロープを作成したいです。 2Dゲーム物理ロープ ポイントを使用し、これらのポイントを線で接続するverlet統合を実装すると考えています。ビデオで効果を得るために、ロープにどのタイプの衝突検出を適用するかを考えています。 私はあなたが各ポイントにいくつかのCDを実行する必要があると思います。box2Dを使用したいので、各ポイントをリジッドボディにしたいと思いますか?アドバイスをいただければ幸いです。

1
クワッドツリー/グリッドベースの衝突-ロジックを実行する
まず第一に、私は自分のゲームロジックを短期間しか書いていないので、これが率直に思えるかもしれないことをおizeびします。 私は四分木とグリッドベースの衝突検出についてたくさん読んできました。私はロジックを理解しています-基本的にオブジェクトが近くにない限り、衝突をチェックしないでください。しかし、実際にこれをどのように実行するかについては言及されていません。 私は私の頭の中にいくつかの可能な方法を持っていますが、どれがベストかわからない 一般的な衝突テスト-最適化なし for(var i:int = 0; i < objects.length; i++){ //find object A var objectA = objects[i]; for(var j:int = i + 1; j < objects.length; j++){ //find object B var objectB = objects[j]; if(objectA.collidesWith(objectB){ //handle collision logic } } 近隣を保存する(方法1) しかし、衝突を最適化して近くのオブジェクトのみをチェックする場合はどうでしょう。それでもすべてのオブジェクトを実行しますか、それともチェックするオブジェクトの近くに配列を作成しますか? var objects:Array = new Array(); var …

2
多くの小さなコライダーを大きなものに結合する
私は何千ものグリッドの正方形で作られたタイルマップを使用してゲームを作成しています。現時点では、各正方形には衝突をチェックするための正方形コライダーがあります。 しかし、何千もの小さなブロックがある場合、それらすべての衝突をチェックするのは非効率的です。タイルマップが事前にこのように見えることを事前に知っていた場合、数千の小さなコライダーではなく、3つまたは4つの大きなコライダーを使用できたはずです。 多くの小さな隣接するタイルを最大限に大きなタイルに結合するための何らかの標準的なアルゴリズムはありますか?もしそうなら、誰かがそれをここで説明したり、そのようなアルゴリズムに関する文献を指すことができますか? あるいは、この方法でタイルコライダーを前処理することは、完全に間違ったアプローチかもしれません。もしそうなら、非常に多くのコライダーの効率に対処するための正しいものは何ですか?

3
小さく高速なオブジェクトの衝突:トンネリングの回避
編集/更新:私の今の最大の質問は、ステップ3の「t = ...」式が良いアイデアか、それを行うより良い方法かということです。他のほとんどの問題は部分的または完全に対処されていますが、この問題に関するコメントや回答はありません。繰り返しになりますが、分析ソリューションがおそらく必要であり、速度と距離が大きすぎ、オブジェクトが小さすぎるため、私が考えることができる反復/再帰ソリューション(コメントで以下にいくつかを提案します)この種の状況をうまく処理する特別な反復/再帰ソリューションであれば、私は間違いなくそれを受け入れます)。これまでのご協力に感謝します。皆さんはすばらしく、あなたの考えと助けに本当に感謝しています! 小さい高速オブジェクト間の衝突を検出しようとしています。これは、比較的低速であっても、トンネリングが非常に簡単に発生する可能性がある状況です。 レイキャスティングは機能しません。これは、1つのオブジェクトと静止した壁の間ではなく、2つの高速オブジェクト間の衝突を検出しているためです。(レイキャスティングを誤解していない限り?)パフォーマンスは非常に重要です。可能な限り、パフォーマンスの大幅な低下を避けたいと思います。機能的で非常に効果的なクアッドツリー(http://en.wikipedia.org/wiki/Quadtree)を既に実装しているので、以下に説明するように変更して使用します。 編集:時間間隔を短くしても機能しません。このソリューションには速度が高すぎます。つまり、トンネリング衝突の大部分を逃しながら、パフォーマンスヒットが大きすぎるということです。(たとえば、時間間隔ごとに数百万単位で測定される速度で移動する約1単位のサイズのオブジェクトがあるかもしれません...) 提案された解決策: ステップ1: 各オブジェクトの動きを囲むボックスを作成し、それらのボックスを四分木に入力して、衝突の可能性のある初期リストを生成します。次の画像を参照してください(この画像は、ある位置から別の位置に移動する円形オブジェクトと、四角形を生成する動きを示しています。四角形は四分木に供給されます)。 ステップ2:(このステップをスキップしたいですか?) 四分木によって生成される可能性のある衝突のリストを調べます。起こりうる各衝突で長方形が交差するかどうかを確認します。その場合は、手順3に進みます。 編集:以下、ショーン・ミドルディッチは、掃引ボリューム/カプセルの交差点の使用を提案しました(オブジェクトが円の場合)。次の3つのオプションがあります。1)ステップ2を完全にスキップします。2)自分のやり方でステップ2を行います。3)ショーンのやり方でやる。ショーンの方法は私のボックスのアイデアよりも計算コストが高くなりますが、私の方法よりも多くの誤検知を排除し、最終ステップに到達できないようにします。 これらの3つの選択肢のうち、どれが最良であるかについて、経験からだれでも話すことができますか?(この物理エンジンをいくつかの異なる目的に使用するつもりなので、どのソリューションを簡単に測定できる特定のテストケースだけでなく、さまざまな状況で最速で動作する「一般的に最高の」ソリューションを探しています最速です)。 ステップ3: 判別式(つまり、平方根の下の部分)が負または0、衝突なし、正の場合、t =式を使用し、衝突の時間としてt値を使用します(その後、それに応じて位置を簡単に調整できます)。 ..衝突後も両方のオブジェクトが存在し続ける場合)。方程式: t =(-1/2 sqrt((2 a w-2 a x + 2 b y-2 b z-2 c w + 2 c x-2 d y + 2 dz)^ 2-4(w ^ 2- 2 w x + x ^ …

4
グラウンドチェックの問題を解決するには?
Unityのサードパーソンコントローラーのグラウンドチェックに問題があることに気付きました。 グラウンドチェックは、プレーヤーが地面に立っているかどうかを検出する必要があります。これは、プレイヤーの下に光線を送信することにより行われます。 ただし、プレイヤーが2つのボックスの真上に立ち、これらのボックスの間にスペースがある場合、レイは隙間に飛び込み、プレイヤーは自分が地面に接触していないと考えます。これは次のようになります。 動けません。光線が隙間にあるため、プレイヤーアニメーターの空中ブレンドツリーがアクティブになっていることがはっきりとわかります。 この問題を解決する最良の方法は何ですか? 同じ原点から異なる角度で複数の光線を照射することを考えていました。そしてOnGround、これらの光線のX%が「地面」に当たった場合にのみ、真になるはずです。または、より良い方法はありますか?

2
MMOでサーバー側のすべてのオブジェクトの座標を保存する
MMORPGの場合: 衝突を検出するために、すべての木、茂みなどの座標をサーバー側に保存することは一般的ですか? もしそうなら、そのような膨大な数の座標(データ構造など、パフォーマンスの問題の処理)を保存するための実行可能な方法は何でしょうか? そうでない場合、このタイプの衝突検出は完全にクライアント側で行われ、サーバーはまったくチェックしませんか? または、クライアントが衝突をチェックし、サーバーが検証するという中間的な状況がありますか?もしそうなら、サーバーも同様にサーバー内の座標を維持せずに同じことを検証しますか?

6
2つの移動するAABBが交差するかどうかを確認する最も速い方法は何ですか?
移動している2つのAABBがありますが、フレームの下で交差するかどうかを確認する最も速い方法は何ですか? 移動するということは、通常の矩形交差法で確認するだけではなく、ブール値のみを返し、ヒット時間などを返さない、単純で簡単なスイープテストを意味します。 私が思うのは、単純に次のようにすることです。 しかし、その六角形は非常に複雑であり、AABB-ポリゴンの交差を計算する方法がわかりませんが、もっと簡単な方法はありますか? あなたが最も気に入っているプログラミング言語であれば、簡単に移植できます。 ありがとう。

2
「距離フィールド」とは何ですか?また、衝突検出にどのように適用できますか?
「距離フィールド」に出くわしたとき、静的オブジェクトと動的オブジェクトの両方を含むシーンでの衝突検出のためのいくつかの効率的な方法を見ていました。 この概念を検索して理解しようとしましたが、非常に複雑な言語で書かれた論文しか見つけることができませんでした。距離フィールドとは何か、どのようにそれらを衝突検出に使用できるのか、誰かが簡単な言葉で説明できますか?

1
長方形のブロックから曲面を作成するにはどうすればよいですか?
以下のためにダイナマイトゲーム様、私はこのように、曲線をたどるブロックを作りたいです。 ブロックがボールに当たると消えます。 なんとか水平に描くことができましたが、パスをたどることができません。 どうすればいいですか?カスタム頂点を持つBox2Dオブジェクトを作成する必要がありますか?

3
ポータルの衝突検出を実装する方法は?
たとえば、このシナリオを考えてみてください(私の恐ろしい描画スキルを失礼します): これは、棒人間が青いポータル(赤いポータルにリンクされている)を通過する「ポータル」に基づいていますが、赤いポータルで彼を止める壁があります。したがって、彼はポータルを完全に通過できません。 だから私の質問はこれです:彼らと物理学/衝突検出を行うにはどうすればよいですか?プレーヤーをスライスしますか?それらをリンクする方法はありますか?これをサポートする物理エンジンはありますか?そうでない場合、どのように作成しますか?

3
曲線による衝突検出
私は、動く円とある種の静的曲線(おそらくベジェ曲線)との間の衝突検出を行いたい2Dゲームに取り組んでいます。 現在、私のゲームは静的なジオメトリとして直線のみを特徴としており、円から線までの距離を計算し、距離が円の半径より小さい場合に線を円から投影することで衝突検出を行っています。 この種の衝突検出を比較的簡単な方法で行うにはどうすればよいですか?たとえば、Box2Dにはベジェ曲線による衝突検出機能が備わっていることを知っています。完全な機能を備えた衝突検出メカニズムは必要ありません。説明したことを実行できるものだけです。 更新:すばらしい回答をありがとう!あなたが説明した方法を完全に理解するには、ベジェ曲線を読む必要があります。その後、私はあなたに戻ります。

2
エンティティシステムでの衝突の検出と応答
ESでもっと楽しく... 現在、私はいくつかのシステムを持っています: レンダラー(レンダリング可能属性、変換属性) モーション(移動可能な属性、変換属性、レンダリング可能な属性[境界ボックスなど]) 入力(InputReceiver属性) 等 衝突検出を追加しています。最初に考えたのは、衝突を実行する新しいシステムを追加することでした。これは、から分離され、これを維持するために私には理にかなってMotionカメラ等、霧、 - -移動またはが必ずしもアニメーション化されていることではないすべてのものは、衝突検出に関与するのでシステムが、と思われるCollisionとはMotion相互に依存しています。 Motionエンティティを移動する場合、変換はで検証する必要がCollisionあり、移動はキャンセルまたは調整(バウンス、壁での停止など)する必要があります。 別の方法として、衝突オブジェクトへの参照を保持するCollidable属性を作成する方法があります-kd-tree、octreeなどは、互いに衝突する可能性のあるエンティティ間で共有されます。Motionシステムは、その属性をチェックし、確認したり、動きを調整するためにそれを使用します。 コードの観点から見ると、これは許容できる解決策です。ただし、ECSアーキテクチャの観点からMotionは、Movable属性を持つすべてのエンティティに適用されないロジックをシステムにプッシュしているようです。 私はまた、動きベクトルを格納することができMovable、属性、および持っているColliderシステムは調整しTransform、必要に応じて、それは間の機能の重複を伴うだろうMotionとCollider、またはからのコールバックColliderへのMotionバウンス/反射などのための衝突場所と表面データに関するいくつかのデータを持ちます。 これは「特別なケースハック」という見出しに該当する可能性がありますが、大量のエッジケースコードを作成せずにこれを処理したことがある人から入力を受け取りたいと思います。 質問 モーションシステムと衝突システムがお互いの知識を必要とするように思われる場合、それらのシステム間の密結合を回避する良い方法は何ですか?

4
SATで連絡先を見つける
分離軸定理(SAT)により、最小平行移動ベクトル、つまり2つの衝突するオブジェクトを分離できる最短ベクトルを簡単に決定できます。ただし、必要なのは、貫通オブジェクトが移動しているベクトル(つまり、接触点)に沿ってオブジェクトを分離するベクトルです。 明確にするために絵を描きました。前から後の位置に移動する1つのボックスがあります。後の位置では、灰色のポリゴンと交差します。SATは、赤いベクトルであるMTVを簡単に返すことができます。青いベクトルを計算しようとしています。 私の現在のソリューションは、青いベクトルの長さが特定のしきい値に達するまで、前と後の位置の間でバイナリ検索を実行します。それは機能しますが、形状間の衝突をループごとに再計算する必要があるため、非常に高価な計算です。 接触点ベクトルを見つけるためのより簡単なおよび/またはより効率的な方法はありますか?

3
XNAでピクセル完璧な衝突検出を得る良い方法はありますか?
XNAでピクセルパーフェクトコリジョンを検出するためのよく知られた方法(またはおそらく再利用可能なコード)がありますか? これは、最初のパス、衝突のクイックテストにポリゴン(ボックス/三角形/円)も使用し、そのテストが衝突を示した場合、ピクセルごとの衝突を検索すると想定しています。 スケール、回転、透明度を考慮する必要があるため、これは複雑になる可能性があります。 警告:以下の回答のリンクのサンプルコードを使用している場合、十分な理由でマトリックスのスケーリングがコメント化されていることに注意してください。スケーリングを機能させるためにコメントを外す必要はありません。

5
2Dレベルの設計/編集/保存に関する質問[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 SuperMarioのような単純な2D Sidescrollerゲームを作成することを考えました。次に、ゲームのレベルを保存、ロード、作成する方法について考えました。私が最初に考えたのは、レベルを表す単純なブロック状のpngを描画することでした。これは、プレーヤーが特別な色(おそらくライラック)を歩くことができるすべての部分を作成します。衝突をチェックできるように、ブロックまたはタイルでレベルをインポートします。 私の質問は次の とおりです:これのためのより良い方法はありますか? これの専門的な方法は何ですか? タイルとタイルに基づくマップエディターでこれを行う必要がありますか?(何らかの理由で私はこれが好きで はありませんが、タイルベースのレベルでは、どのように傾斜を実現し、どのように衝突をチェックしますか?

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