2016-06-15 24 views
0

i ve got a problem with a player it has RigidBody2D,Box Collider2D i 2日間検索しても、DontGoThroughThingsや他の多くのものが使用されていなかった。 i`amモバイルゲームを作って、スクリプトInput.touchesC#ユニティ2Dプレーヤーがボックスコライダーを通過

foreach (Touch touch in Input.touches) 
      { 
       Vector3 newPosition = transform.position; 
       newPosition.y += touch.deltaPosition.y * speed * Time.deltaTime; 
       transform.position = newPosition; 
      } 

に追加し、私は速い被写体に指がまっすぐカメラビューの外に出る移動するときには、スピードを持って、彼はコライダーと衝突didntの

悪い英語で申し訳ありません あなたのアドバイスありがとうございます 詳細が必要な場合は、詳細をお知らせします。

答えて

0

問題は、オブジェクトがフレーム間をすばやく移動しているため、完全にコライダーを逃してしまうことです。 touch.deltaPosition.yを直接使用するのではなく、オブジェクトが適切な範囲に到達できる最大速度を固定する必要があります。このようなもの:

foreach (Touch touch in Input.touches) 
{ 
    Vector3 newPosition = transform.position; 
    newPosition.y += Mathf.Clamp(touch.deltaPosition.y * speed, MIN_SPEED, MAX_SPEED) * Time.deltaTime; 
    transform.position = newPosition; 
} 
+0

アドバイスをいただきありがとうございます。今では、それは箱のコライダーから外れていますが、それは下がらないだけです。大きな感謝 –

+0

@PeterisUlmanisあなたは、オブジェクトを降りさせるために、負の値としてMiN_SPEEDを設定する必要があります。 –

0

これは、離散物理シミュレーションの一般的な問題です。このlinkから

コピー/ペーストの場合にはサイトが死ぬ:

この現象は、「トンネリング」と呼ばれています。 オブジェクトが非常に高速になり、新しい更新された位置が と交差していないときにトンネリングが発生します。

これは実際に規模に関するものです。トンネリングは、 オブジェクトが、 シミュレーションのタイムクォンタ内の別のオブジェクトの 最短幅の完全長を移動できるように、十分に高速に移動している場合にのみ発生します。

連続した 衝突検出(CCD)を実行する物理シミュレーションライブラリがあり、2つのオブジェクト がシミュレーションフレーム内の任意のポイントで衝突したかどうかを判断します。通常、これは、 に、移動するオブジェクトが タイムクォンタム全体で占有したすべてのスペースを含むボリュームを持つ新しい衝突形状を作成することによって達成される です。次に、 の移動ボリュームと他のオブジェクトとの交差点を把握しようとし、両方のオブジェクトが衝突の交差点に同時に存在する場合は、 と表示されます。 ボリューム

関連する問題