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

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

6
衝突エンジンはどのように機能しますか?
衝突エンジンはどのくらい正確に機能しますか? これは非常に広範な質問です。どのコードが物事をお互いにバウンドさせ続けますか、どのコードがプレーヤーを壁の中を歩くのではなく壁の中に入れますか?重力と衝突が正常に機能するように、コードはどのようにプレーヤーの位置とオブジェクトの位置を常に更新しますか? 衝突エンジンが何であるかわからない場合、基本的にはプラットフォームゲームでプレイヤーが実際に壁などにぶつかるようにするために使用されます。2Dタイプと3Dタイプがありますが、それらはすべて同じことを行います:衝突。 それでは、衝突エンジンが刻々と変化するのはなぜでしょうか?


9
PlayerとWorldの間の循環依存関係を回避する方法は?
私は、上下左右に移動できる2Dゲームに取り組んでいます。基本的に2つのゲームロジックオブジェクトがあります。 プレーヤー:世界に対して相対的な位置を持っている ワールド:マップとプレイヤーを描画します これまでのところ、WorldはPlayerに依存している(つまり、参照している)ため、プレイヤーキャラクターをどこに描画するか、マップのどの部分を描画するかを把握するための位置が必要です。 衝突検出を追加して、プレーヤーが壁を通過できないようにします。 私が考えることができる最も簡単な方法は、意図した動きが可能かどうかをプレイヤーに世界に尋ねることです。しかし、それはPlayerとWorldの間に循環的な依存関係を導入します(つまり、それぞれが他方への参照を保持します)。私が思いついた唯一の方法は、WorldにPlayerを移動させることですが、それはやや直感的ではありません。 私の最良の選択肢は何ですか?または、循環依存関係を回避する価値はありませんか?

10
最も効率的なAABB対レイ衝突アルゴリズム
AABB対レイ衝突検出用の既知の「最も効率的な」アルゴリズムはありますか? 私は最近、ArvoのAABB対Sphere衝突アルゴリズムに出くわしましたが、これに似た注目すべきアルゴリズムがあるのではないかと考えています。 このアルゴリズムの条件が必要なのは、光線の原点から衝突点までの距離の結果を照会するオプションが必要だということです。これを言ったが、距離を返さない別のより高速なアルゴリズムがある場合、そうするものを投稿することに加えて、そのアルゴリズムを投稿することも実際に非常に役立ちます。 また、関数の戻り引数が何であるか、そしてそれを使用して距離または「衝突なし」の場合を返す方法も述べてください。たとえば、距離の出力パラメータとブール値の戻り値はありますか?または、距離のあるフロートを返すか、衝突しない場合は-1の値を返しますか? (知らない人のために:AABB = Axis Aligned Bounding Box)

7
2D Platformer AABBの衝突問題
AABBの衝突解決に問題があります。 最初にX軸を解決し、次にY軸を解決して、AABB交差を解決します。これは、このバグを防ぐために行われます:http : //i.stack.imgur.com/NLg4j.png 現在のメソッドは、オブジェクトがプレーヤーに移動し、プレーヤーを水平方向に押す必要がある場合に正常に機能します。.gifでわかるように、水平スパイクはプレーヤーを正しく押します。 ただし、垂直スパイクがプレーヤーに移動しても、X軸が最初に解決されます。これにより、「スパイクをリフトとして使用する」ことができなくなります。 プレーヤーが垂直スパイクに移動すると(重力の影響を受けて落下します)、最初はX軸にオーバーラップがなかったため、Y軸に押し込まれます。 私が試したのは、このリンクの最初の回答で説明した方法でした:2D長方形オブジェクト衝突検出 ただし、スパイクと移動オブジェクトは、速度ではなく位置を変更することで移動します。Update()メソッドが呼び出されるまで、次の予測位置を計算しません。言うまでもなく、このソリューションも機能しませんでした。:( 上記の両方のケースが意図したとおりに機能するように、AABBの衝突を解決する必要があります。 これは私の現在の衝突ソースコードです:http : //pastebin.com/MiCi3nA1 このバグは最初からずっとエンジンに存在していたので、誰かがこれを調べることができれば本当に感謝しています。これは真剣に衝突コードを見て夜を過ごし、「楽しい部分」に到達してゲームロジックをコーディングするのを妨げています:( XNA AppHubプラットフォーマーデモと同じ衝突システムを実装しようとしました(ほとんどのものをコピーアンドペーストします)。ただし、私のゲームでは「ジャンプ」バグが発生しますが、AppHubデモでは発生しません。[ジャンプバグ:http : //i.stack.imgur.com/NLg4j.png ] ジャンプするには、プレーヤーが「onGround」であるかどうかを確認し、Velocity.Yに-5を追加します。 プレーヤーのVelocity.XはVelocity.Yよりも高いため(図の4番目のパネルを参照)、onGroundは本来あるべきではないときにtrueに設定され、プレーヤーを空中でジャンプさせます。 プレーヤーのVelocity.XがVelocity.Yよりも高くなることはないので、AppHubデモではこれは起こらないと思いますが、間違っている可能性があります。 これを解決する前に、まずX軸で解決し、次にY軸で解決しました。しかし、それは私が上で述べたようにスパイクとの衝突を台無しにします。

4
ボールがコーナーに当たった場合、それはどこで偏向しますか?
私は三角法を磨く必要があり、簡単な数学的モデルでここで助けてくれることを願っています。ここに添付されている画像でこれまでのところ私のモデルです。ボールが非常に速く動いている場合、フレームアニメーションに他の問題があることは承知していますが、今のところはballDxとballDyを計算するだけです。また、ballDx = 0(垂直移動のみ)である可能性もありますが、ボールがたわむと、ballDxは異なる値を取得する可能性があります。

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

6
高速移動オブジェクトの六角形衝突検出?
オブジェクトには位置と速度ベクトルがあります。通常、2つのオブジェクトが衝突するかどうかを確認するために位置のみが使用されます。これは、最初の衝突チェックで最初のオブジェクトの前にあり、その後ろで2番目の衝突チェック。 また、ラインベースの衝突チェックもあります。このチェックでは、各オブジェクトの移動ベクトルが他のオブジェクトの境界ボックスと交差するかどうかのみをチェックします。これは、ポイントの拡張として見ることができます。ただし、高速で移動するオブジェクトが本当に小さい場合にのみ機能します。 だから、私のアイデアは、ポイントを拡大するのではなく、なぜ長方形を拡大しないのですか?これにより、六角形になります。 今、これまでのところとても良い。しかし、この種の2つの六角形が交差するかどうかを実際に確認するにはどうすればよいですか?これらは非常に特殊な六角形であることに注意してください。 ボーナス質問:衝突が発生した場所を正確に(または、ある程度の時間後に)計算することは可能ですか?これは、実際に何がどこで、どのくらいのパワーで発生したかを検出し、衝突からフレームの終わりまでの時間での動きをシミュレートするのに非常に便利です。

6
ポイントと軸に揃えられた長方形の間の距離を計算するにはどうすればよいですか?
x、yの位置、高さと幅、およびランダムに配置されたポイントが近くにある2D長方形があります。 このポイントが特定の距離より近い場合、このポイントが長方形と衝突するかどうかを確認する方法はありますか?そのポイントの外側にある目に見えない半径が、この長方形と衝突することを想像してください。私はこれが正方形ではないという理由だけで問題があります!

3
SATとの3D OBBコリジョンに使用する軸の数と数
私は以下に基づいてSATを実装しています: 指向バウンディングボックスを使用した動的衝突検出 [PDF] 7ページの表では、衝突を見つけるためにテストする15軸を参照していますが、Ax、Ay、Azだけで、すでに衝突が発生しています。 他のすべてのケースをテストする必要があるのはなぜですか?Ax、Ay、Azだけでは不十分な状況はありますか?

6
どのGameObjectが衝突を処理するかを決定する方法は?
衝突では、2つのGameObjectが関係していますか?私が知りたいのは、どのオブジェクトに自分が含まれているOnCollision*かをどのように決定するのですか? 例として、PlayerオブジェクトとSpikeオブジェクトがあるとします。私の最初の考えは、次のようなコードを含むスクリプトをプレーヤーに配置することです。 OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Spike")) { Destroy(gameObject); } } もちろん、代わりに次のようなコードを含むスクリプトをSpikeオブジェクトに置くことで、まったく同じ機能を実現できます。 OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Player")) { Destroy(coll.gameObject); } } どちらも有効ですが、この場合、衝突が発生するとPlayerでアクションが実行されるため、Playerでスクリプトを使用する方が理にかなっています。 しかし、私がこれを疑っているのは、将来、敵、溶岩、レーザービームなど、衝突時にプレイヤーを殺すオブジェクトをさらに追加したいかもしれないということです。これらのオブジェクトはおそらく異なるタグを持つでしょう。そのため、プレーヤーのスクリプトは次のようになります。 OnCollisionEnter(Collision coll) { GameObject other = coll.gameObject; if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) { Destroy(gameObject); } } 一方、スクリプトがスパイク上にあった場合、あなたがしなければならないことは、プレーヤーを殺すことができ、スクリプトのような名前を付けることができる他のすべてのオブジェクトに同じスクリプトを追加することKillPlayerOnContactです。 また、プレイヤーと敵が衝突した場合、おそらく両方でアクションを実行したいと思うでしょう。その場合、どのオブジェクトが衝突を処理する必要がありますか?または、衝突を処理し、異なるアクションを実行する必要がありますか? これまでに妥当なサイズのゲームを作成したことはありません。最初にこの種の問題が発生した場合、コードが大きくなり、メンテナンスが難しくなるのではないかと思っています。それとも、すべての方法が有効であり、それは本当に重要ではありませんか? 洞察は大歓迎です!お時間をいただきありがとうございます:)

7
動く球体間の衝突を検出するための良いアルゴリズムは何ですか?
(衝突検出の目的で)3Dオブジェクトが球体でゲーム内で表現される場合、球体間の衝突を検出するための良いアルゴリズムは何ですか? 各オブジェクトに最後のフレームの位置と新しい(望ましい)位置がある場合、球体が前のフレームで交差せず、2番目のフレームで交差しない衝突を識別するための優れたアルゴリズムは、しかし、それらはその間のどこかで交差しましたか?

2
クアッドツリーとグリッドベースの衝突検出
私は4人のプレイヤーが協力するrタイプのゲームを作成しており、衝突検出コードを実装しようとしています。衝突検出の処理方法に関する多くの記事や資料を読みましたが、何をすべきかを考えるのに苦労しています。クワッドツリーが最も一般的な方法であるように見えますが、一部のリソースではグリッドベースのソリューションに言及しています。前のゲームで検出にグリッドを使用したことで、私はそれに満足していますが、実際には四分木よりも優れていますか?どちらが最高のパフォーマンスを提供するかわかりません。また、少しベンチマークを実行しましたが、両方のソリューションに大きな違いはありません。 一方が他方より優れていますか?またはよりエレガント?どれを使うべきか本当に分かりません。 どんなアドバイスも大歓迎です。ありがとう。

3
チームはソースファイルの上書きをどのように防止しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。 開発者1が作業してAudio.cppおり、開発者2も作業をしているとしましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

4
衝突の検出は、サーバー側で行うか、クライアント/サーバー間で協調して行う必要がありますか?
私は非常に重い衝突検出処理を持つオンラインゲームに取り組んでいます。プレーヤーモデルは、サーバー側にのみ存在する他のプレーヤー、Mob、構造、地形、およびソリッドオブジェクトと衝突します(クライアントデータファイルには保存されません)。 セキュリティのために、サーバー側ですべての衝突検出を行う必要がありますか?または、クライアントに検出を行わせ、サーバーに何らかの方法でフォローアップさせる必要がありますか?サーバーが単独で行うには多すぎるように感じます(1台のサーバーで数百人のプレイヤー向けにエンジンを設計しています)。 誰もが主流のMMOがそれをどのように行うか知っていますか?現在、ほぼすべてのMMOが物理ハッキングの影響を受けやすく、通常、ハックを検出して人を禁止することで対処しています。少なくとも物理コンポーネントについては、ハックはまったく機能しませんでした。

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