2016-08-16 4 views
2

私はUnityで2D Brick Breakerのゲームを作っています。Unity Brick Breaker:2つのレンガのボールの打ち合わせ

ボールが2つのレンガの間にぶつかったときのシナリオに問題があります。私はすべてのレンガにBoxCollider2Dを取り付け、ボールにCircleCollider2Dを取り付けました。ボールが2つの隣接するレンガの間に当たると、ボールはレンガの端に当たったときと同じ方向に跳ね返ります。それらの間にエッジはありませんが、隣接する2つのレンガは連続したサーフェスを形成します。したがって、ボールは、バウンスする代わりに(他の方向に)表面から跳ね返るはずです。

enter image description here

誰もがこの問題に取り組むためのすべてのソリューションを知っていますか?私はこれをUnity Physicsフォーラムで尋ねましたが、何の答えも得られなかったので、どこにいてもこの問題が発生している可能性があるかどうかを確認してください。

おかげで、 Mukul

+1

1つのボックスジオメトリを使用できますが、異なるテクスチャを使用して2つのブロックとしてモックできます。 – David

+0

それはできません。ボックスのジオメトリに基づいて、ブロックごとに個別に衝突を検出しています。 – mukul

+0

実行時に位置合わせされたボックスコライダーをマージできますか? – TheDjentleman

答えて

0

私が問題になる可能性がある、これを推測しています:

あなたのボールは、強い力でレンガに当たっている、それがでレンガの1を動かすかもしれないチャンスがあります非常に非常にわずかな距離、レンガの質量が非常に重い場合でも。

この動きは、表面が不均一になることがあります。そのため、ボールは同じ方向に戻って跳ね返ります。

各ブリックにリジッドボディコンポーネントを追加してください(まだ行っていない場合)。isKinematicプロパティをtrueに設定してください。

これが解決すれば教えてください。

+0

レンガにRigidbodyコンポーネントが取り付けられていない場合は、とにかく移動しません。また、リジッドボディを追加してisKinematicをtrueに設定しても機能しませんでした。 – mukul

0

ウェイ1:

使用壁のためではなく、一つ一つのレンガのためのワンボックス衝突型加速器。 これはあなたの問題を修正+あなたのプロジェクトを最適化します。

ウェイ2:

あなたはこのケースでは、壁programmalyとコライダーを構築する必要があり、それらの間のスペースなしでなければなりません。これで問題を解決する必要があります。

ウェイ3:

あなた自身の打撃壁のロジックを作成します。

OnColliderEnterあなたはボールの速度を取得する必要があります。 OnColliderEndあなたは手動速度を設定する必要があります。

+0

私はブロックごとに衝突をチェックしているので、すべてのレンガにボックスコライダーが必要です。例えば。ボールがレンガと衝突すると(つまり、ボールの衝突者がレンガの衝突者と衝突する)、レンガを破ります。 – mukul

+0

更新された解決策 – Andrew

+0

衝突後にボールの速度を手動で変更しようとします。それが動作すれば私はあなたに知らせます。 – mukul

関連する問題