2016-12-23 7 views
0

Unity内の高速移動オブジェクトの衝突がない方法に対処する方法については、誰も提案していません。私はモバイル用のブレークアウトゲームを作成しており、パドルを非常に速く動かすと、ボールとの衝突を逃してしまうことを発見しました。私は、衝突を連続的な検出に変更しましたが、衝突時にパドルが押し下げられるなど、奇妙な動作を引き起こします。高速移動オブジェクトのユニティコリジョン障害

また、2Dコリダーで正常に動作しないようにするには、dontgothroughスクリプトで試してみました。誰でも何か提案がありますか?

答えて

0

高速移動オブジェクトとの衝突は、多くのゲームエンジンで問題になります。それを扱う方法はいくつかあります:

  1. オブジェクトを遅くします。
  2. オブジェクトを大きくします。
  3. 中間ステップの衝突を更新します。
  4. オブジェクトパスを計算し、他のオブジェクトと衝突するポイントを見つけようとします。

スピード制限を適用することで、パドルが速すぎるのを止めるか、停止することをお勧めします。パドルをユーザーの指に倣うようにしますが、すぐにスナップすることはできません。これはおそらくよく見えるでしょう。

パドルを広げることもできますが、ゲームのバランスに多少の影響を与える可能性があります。

+0

ありがとう、私はこれらの提案のいくつかを試してみます。私の唯一の問題は、時間の経過と共にボールスピードが増すにつれてパドルを速く動かす必要があるということです。 – Kaz

0

剛体で連続的に検出を試みてください。

これでもまだ失敗した場合は、現在の位置と前の位置の間でラインキャストを使用できます。ボールがパッドよりも小さい場合、各コーナーとセンターが最も可能性が高い パフォーマンスは心配しないでください。5つのラインカードは無関係です。

Vector3 prev; 
void Start(){ 
    prev = transform.position; 
} 
void Update(){ 
    Vector3 current = transform.position; 
    if(Physics.Linecast(prev, current)){ 
      // Collision 
    } 
    prev = current; 
} 
+0

ありがとう、ラインキャストの使用方法がわからない場合は、このインスタンスでの使用方法の例を挙げることができます。 – Kaz

+0

コードのおかげで、ここの初心者のビットと私はまだ潜在的に高速移動オブジェクトである私のパドルの周りに私の頭を包むことはできません。このコードがパドルに接続されているかどうかわからず、if文(colllision)の本体がOnCollisionEnter2Dメソッドを呼び出すと思います。 – Kaz