工作我有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