2017-05-13 90 views
1

enter image description here團結 - 盒對撞機無法正常

工作我有2對撞機(綠框),並在我的場景一球。每當球觸及較大的對撞機時,球員死亡,遊戲結束。但是,如果球位於較小的對撞機上(如圖中所示),則球員狀態良好,遊戲繼續運行。

問題

當我從高處落下的球,有時球設法接觸到更大的對撞機(的可能是因爲它的動量)和我的玩家死亡。正如我所說,這並不總是發生,這導致了不可預測的結果。

我做了什麼來解決這個問題

我說rb2d.velocity = Vector2.zero;儘快將其與小Collider碰撞停球。但它沒有奏效。

燈光是與Game Object相關的tag,該對象上附有較小的Box Collider。

private void OnCollisionEnter2D(Collision2D collision) 
    { 
     if (collision.gameObject.CompareTag("light")) 
     { 

      Debug.Log("collision"); 
      rb2d.velocity = Vector2.zero; 
      return; 
     } 
     // Zero out the ball's velocity 
     rb2d.velocity = Vector2.zero; 

     Debug.Log("gameovercollision"); 
     // If the ball collides with something set it to dead... 
     isDead = true; 
     //...and tell the game control about it. 
     GameController.instance.PlayerDied(); 
    } 

我甚至試圖從同一高度釋放球,但仍然是,行爲是不可預知的。

原木

gameovercollision UnityEngine.Debug:日誌(對象) 球:OnCollisionEnter2D(Collision2D)(在資產/腳本/ Ball.cs:63)

碰撞
UnityEngine.Debug:Log(Object) Ball:OnCollisionEnter2D(Collision2D)(At Assets/Scripts/Ball.cs:54)

  • 這是什麼原因?

  • 爲什麼較小的對撞機不能完美地停止球?

  • 我該如何解決這個問題?

回答

0

很可能是因爲球的速度足夠高,足以在單個固定時間步後進入兩個碰撞體。

嘗試減小項目設置 - >時間下的Fixed Timestep值和/或將球的剛體2D的Collision Detection字段設置爲Continuous

+0

首先,謝謝你的回答。我剛開始學習團結,所以我想弄明白Unity在事情上是如何工作的。那麼,爲什麼較小的「Box Collider」會停止球(因爲它位於較大的Collider之上)?日誌也顯示球首先接觸到較大的對撞機,然後是較小的碰撞體。這怎麼可能?較小的對撞機在上面所以,球首先應該接觸較小的一個。 – rayan

+0

以及如何減少固定時間步長解決問題。 – rayan