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

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

3
移動する円で掃引される2Dグリッドセルを見つける方法は?
私は2Dグリッドに基づいてゲームを作成しています。一部のセルは通過可能で、一部は通過できません。動的オブジェクトは、グリッドに関係なく連続的に移動できますが、通行できないセルと衝突する必要があります。 グリッドに対してレイをトレースするアルゴリズムを作成しました。これにより、レイが交差するすべてのセルが得られます。ただし、実際のオブジェクトはポイントサイズではありません。私は現在、それらを円で表しています。しかし、動いている円をトレースするための効果的なアルゴリズムを理解できません。ここに私が必要なものの写真があります: 数字は、円がグリッドセルと衝突する順序を示します。誰かがこれらの衝突を見つけるアルゴリズムを知っていますか?できればC#で。 更新円は単一のグリッドセルよりも大きい場合があります。

1
リアルな2Dロールプレイングゲームの衝突検出を作成するにはどうすればよいですか?
私はいつもスターオーシャン、ファイナルファンタジー、ソードオブマナ、さらには「テイルズオブ」シリーズのような昔ながらの2Dロールプレイングゲームを作りたかったのですが、多くの人が作っていると思います。しかし、1行のコードを書く前でも、多くの調査、描画、トライアウトを行いました。 私の質問に対するほとんどすべての回答は見つかりましたが、解決できなかった問題があります。前に挙げたゲームのように、現実的でありながら単純な衝突検出をどのように作成しますか? 私はすでに衝突検出を計算するいくつかの方法を知っています、以下の例を見てください: これらのどれも私のニーズを満たしていません。 タイルベースの衝突は単純すぎるため、スターオーシャンよりもゼルダに適しています。さらに、各タイルの描画は、リアルに見えるようにすべてのスペースを埋める必要があります。 Pixel-perfectには制約が多すぎます。タイルのあちこちにピクセルがある場合、プレーヤーはどこにもない中央部でスタックする可能性があります(つまり、一部のゲームでは、幅2ピクセルのツリールートでスタックします)。 また、バイナリマスクはメモリと設定を多用します。 たくさんのドキュメントを読みましたが、見栄えの良いものは見つかりませんでした。また、すべてのトライアウトが、以前使用していたものに近づきませんでした。進化した2D RPGがどのように機能するかについての良いリンクやチュートリアルがある場合は、私に知らせてください。

4
非整列衝突回避(ステアリング)を使用しているときにオブジェクトの衝突が移動する
まれなケースだと思うのに、未調整の衝突回避に問題があります。2つのオブジェクトを互いに近づけるように設定しましたが、オフセットはわずかです。そのため、1つのオブジェクトがわずかに上方向に移動し、1つのオブジェクトがわずかに下方向に移動しています。 私の位置合わせされていない衝突回避ステアリングアルゴリズムでは、オブジェクトの前線と、これら2つの線が最も近い他のオブジェクトの前線上の点を見つけています。これらの最も近い点が衝突回避距離内にあり、それらの間の距離が2つのオブジェクトの境界球の2つの半径よりも小さい場合、オブジェクトは適切な方向に離れるはずです。 問題は、私の場合、線上の最も近い点が実際の衝突点から本当に遠くにあると計算されることです。これは、オブジェクトが通過するときに、各オブジェクトの2本の前進線が互いに離れるからです。問題は、これが原因でステアリングが行われず、2つのオブジェクトが部分的に衝突することです。 衝突点を正しく計算する方法について何か提案はありますか?おそらく、2つのオブジェクトのサイズを考慮に入れているのでしょうか。

2
水に浮かぶオブジェクトのシミュレーション
トップダウンの釣りゲームに取り組んでいます。湖を動き回るボートに関して、いくつかの物理演算と衝突検出を実装したいと思います。メインモーターまたはトローリングモーターのいずれかからの推力、オブジェクトへの風の影響、およびオブジェクトへの水の抗力を実装できるようになりたいと思います。 私は遠い物理エンジンを見てきましたが、物理エンジンを使用した経験がなく、遠いものがこのタイプのものに適しているかどうかはよくわかりません(ほとんどのデモは垂直方向への重力の適用であるようですトップ/ダウンタイプモデル)。 farseerエンジンは適切でしょうか?または別のエンジンの方が適していますか?

2
2Dオブジェクト整列境界ボックス交差テスト
2つのオブジェクト配置の境界ボックスがあります(つまり、軸配置ではなく、オブジェクトとともに回転します)。オブジェクトに配置された2つのボックスが重なっているかどうかを知りたい。(編集:注-私は軸に沿った境界ボックステストを使用して遠くのオブジェクトをすばやく破棄しているので、クワッドルーチンが少し遅いかどうかは関係ありません。) 私の箱は4つのX、Yポイントとして保存されます。答えを探して回りましたが、例の中の変数名とアルゴリズムを理解して、特定のケースに適用することはできません。 誰かがこれがどのように行われるかを明確かつ簡単な方法で教えてくれますか?ありがとう。(特定の言語は重要ではなく、Cスタイルの疑似コードで問題ありません。)

3
スプライトとユーザーが生成したある種の形状との衝突を検出するにはどうすればよいですか?
スプライトとユーザーが生成したある種の形状との衝突を検出する方法。 例えば。画面上にいくつかのオブジェクトがあります。ユーザーは指を取り、オブジェクトの周りに円を描きます(選択ルールはスプライトの周りに円を描くことですが、塗りの形状はさまざまです)。選択したオブジェクトを検出する必要があります。 (デモ画像):

3
物理シミュレーションと異なる座標系との接続
オブジェクトが「ウィンドウ」を介して2つの物理シミュレーションの間を移動し、ウィンドウプレーンと交差する場合に両方のシミュレーションのオブジェクトと衝突するようにします。 シミュレーションの座標系は同じ原点を持たず、向きが異なる場合があります。シミュレーションをそれ自体にラップする必要はありませんが、プラスになります。 個々のオブジェクトを複製せずにシステムを効率的に接続するにはどうすればよいですか? 編集: 計算は可能な限り正確でなければならないので、オブジェクトが反対側から同時にウィンドウを横切ってもオブジェクトが動かなくなることはありません。

3
レーシングAI動作のパターン
それでは、スプラインベースのレーシングAIがあるとします。トラックの周りのブレーキングとステアリングの基本をすでに処理できると仮定します。 衝突回避、追い越し、ドラフティング、ブロッキング、その他の動作をどのように構成および実装して、車の競争力を維持しながら興味深いレースを行いますか? 論文/実装へのリンクは素晴らしいでしょう。

2
オクツリーの境界ボックス
八分木は、錐台カリングや3Dの衝突検出などによく使用されます。しかし、アルゴリズムがどのように機能するのかまったくわかりません。バウンディングボックスを使用しようとすると、octreeの原則全体が壊れます。これは、特定のボックスが1つのノードに格納されていても、実際には別のノードが表すスペースと重なっている可能性があるためです。さらに、これがポイントではなくバウンディングボックスをルックアップする場合にどのように機能するかはわかりません。これも、実質的にすべてのノードのルックアップが行き詰まり、目的が果たせなくなる可能性があるためです。 では、いったいどのようにoctreesは境界ボックスに対処するのでしょうか?

1
衝突検出:特別なケースがたくさんありますか?
単純な物理エンジンを2Dで書いています。私の最初の目標は、衝突検出を機能させることです。私のオブジェクトは最終的にプリミティブシェイプで構成されることはわかっていますが、私は疑問に思いました-衝突検出ライブラリは、「rayAndLine」、「rectangleRectangle」、「rectangleCircle」などの特別なケース関数の束で構成されるのでしょうか、または形状を作成するために使用されるプリミティブに関係なく機能する、衝突検出のための共通の基盤となるフレームワークはありますか?

2
マルチプレイヤーレースゲームでのプレイヤー間の衝突
私は、p2.js、フェイザー、node.jsを使用して、シンプルなレーシングゲーム(宇宙船、無重力)を作成しています。 私がしたこと:クライアントはサーバーから世界の状態を受け取ります: サーバーからの最新の速度/位置に基づいて他のプレイヤーを推定する クライアント側の予測が正しいかどうかを確認します-サーバーからの適用位置がなく、サーバーが認識していなかった入力を処理します。 固定物理ステップ サーバ: クライアントから入力を受け取り、適用する 固定物理ステップ 各クライアントに世界の状態を送信します 現在、プレイヤー同士の衝突に苦労しています。衝突しているプレイヤーは、衝突中に常にジャンプしています。クライアント側の予測がサーバーと同様の結果を計算していないためだと思います。 サーバーはプレーヤーからのすべての入力を認識していません(ラグ)。 プレーヤーとサーバーが衝突しているプレーヤーの位置が異なります(ラグ)。 この2つを組み合わせると、クライアントはサーバーとは異なる衝突を解決し、世界の状態が到着したときにプレーヤーは大きな修正を行う必要があります。

2
Unity3dを介して新しいc#スクリプトを追加するときにVS soution Explorerを強制的に再読み込みしますか?
私はC#スクリプトを作成する(ときCreate -> C# Script)を介しUnity3d やからそれを削除Unity3d- Visual Studioショー私の警告ウィンドウ。 気に障る。 ウィンドウなしでソリューションエクスプローラーで「ReloadAll」を強制する方法はありますか?
8 unity  visual-studio  unity  google-play-services  google-play  physics  simulations  c#  unity  raycasting  unity  virtual-reality  savegame  arcade  c++  steam  ios  objective-c  databases  storage  opengl  vbo  vao  libgdx  scene2d  unity  animation  c#  path-finding  roguelikes  opengl  c++  glsl  2d  physics  phaser  selection  3dsmax  unity  collision-detection  c#  tilemap  isometric  unity  c#  2d  sprites  mouse  scripting  grid  c#  unity  libgdx  java  unity  playstation4  c#  c++  directx  dll  c++cli  libgdx  overlap2d  multiplayer  node.js  websocket  animation  unity  textures  unity  terrain  physics  unity  rotation  movement  transformation  monogame  windows  installer  shaders  unity  virtual-reality  unity  performance  frame-rate  profiler  google-play  appstore  trademark  java  android  libgdx  unity  unity-networking  unity  physics  software-engineering  unity  savegame  physics  2d  unity  unity  c#  unity-networking  textures  geometry  unreal-4  3d-modeling  java  android  libgdx  android  collision-detection  libgdx  rotation  legal  localization  patents  opengl  cubemap  sampler-state  2d  transformation  unity  c#  opengl  glsl  lighting  opentk  c++  collision-detection  physics 

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

2
障害物にスナップするドラッグ可能なオブジェクトを作成するにはどうすればよいですか?
私はまだマウスでドラッグして別の質問(私はC#でUnityを使用しています)を持ちますが、それほど一般的ではない詳細:ドラッグが発生する経路の途中に障害物が存在する(2Dではなく3Dスペース) 。 説明させてください。"obj"と呼ばれる立方体をドラッグしたい平面があるとします。それは簡単です。これが私の簡単な実装です: void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, 1000000)) obj.transform.position = new Vector3(hit.point.x,0.25F,hit.point.z); } できます。ただし、平面上に障害物である他のいくつかの立方体もあるとします。明らかに、プレイヤーが平面上で「obj」を動かすとき、そのような動きは障害物によってブロックされるべきです。そして、障害物と衝突している間、「obj」はその障害物の側面にのみ移動して移動する必要があります。マウスを動かして "obj"が障害物との衝突をやめると、自由なドラッグスタイルの動きが再開されます。 課題をより困難にするために、障害物でRigidBodyコンポーネントを使用せずにそれを達成するために懸命に努力しています(ドラッグされたオブジェクトはそれを持つことができます)。それを達成するための最も効率的な方法は何ですか?どうもありがとう! 編集:コメンテーターは私の注意を喚起しました、私はスナップするときにオブジェクトが回転することを許可されていることを言及すべきです。 編集2:元の定式化の難しさを考慮して、ドラッグされたオブジェクトでのリジッドボディコンポーネントの使用を許可する質問を変更しました。ソリューションでは、障害物でリジッドボディコンポーネントを使用できません。

2
Unityのビルトインフィジックスを使用して、リジッドボディが互いに移動しないようにするにはどうすればよいですか?
オブジェクトをドラッグできるゲームを作ろうとしていますが、物理に問題があります。質量が類似しているリジッドボディを使用すると、ドラッグ時に互いに突き抜けて、不要な動きが発生することがあります。こちらがデモです。 Unity 3Dの組み込みの物理演算のみを使用してこれを実行したいと思います。 デモでは、マウスを使用してオブジェクトをクリックしてドラッグできます。円柱はすべてボックスコライダーと質量10000です。また、向きに応じてさまざまな制約があります(どれも回転できず、すべてxまたはyで制約されます)。球体の質量は1、球体コライダー、およびz拘束です。 球と円柱はうまく相互作用します。ただし、円柱を互いにドラッグすると、交差が発生します。これいらない! 円柱の補間は「補間」に設定され、衝突検出は「連続」に設定されています。'DontGoThroughThings'スクリプトをすべてのシリンダーにスローしましたが、何も実行しないようです。リジッドボディの速度の設定に関しては、以下の両方のラインを使用して、基本的に同じ結果が得られました。 rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange); //rb.velocity = speed * diff * Time.deltaTime; 独自の衝突検出コードを書かなければ、アイデアはありません。簡単な設定や見逃したものはありますか? コンテキストが説明されたので、より正確な質問を次に示します。「デモのシリンダーが互いに移動しないようにするにはどうすればよいですか?」

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