工作我有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)
這是什麼原因?
爲什麼較小的對撞機不能完美地停止球?
我該如何解決這個問題?
首先,謝謝你的回答。我剛開始學習團結,所以我想弄明白Unity在事情上是如何工作的。那麼,爲什麼較小的「Box Collider」會停止球(因爲它位於較大的Collider之上)?日誌也顯示球首先接觸到較大的對撞機,然後是較小的碰撞體。這怎麼可能?較小的對撞機在上面所以,球首先應該接觸較小的一個。 – rayan
以及如何減少固定時間步長解決問題。 – rayan