我的场景中有2个Box Colliders(绿色方框)和一个球。每当球接触到更大的Box Collider 时,玩家就会死亡并且游戏结束。但是,如果球在较小的对撞机上(就像它在图片中一样),那么玩家就可以了,游戏继续运行。
问题
当我从高处投球时,有时球会碰到较大的对手(可能是因为它的动量)而且我的球员死了。正如我所说,这并不总是会导致不可预测的结果。
解决这个问题的方法
我添加了rb2d.velocity = Vector2.zero;
,以便在它与较小的Collider
发生碰撞时立即停止。但它没有用。
light 是与Game对象关联的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:日志(对象) Ball:OnCollisionEnter2D(Collision2D)(在Assets / Scripts / Ball.cs:63)
碰撞
UnityEngine.Debug:日志(对象) 球:OnCollisionEnter2D(Collision2D)(在Assets / Scripts / Ball.cs:54)
这种行为的原因是什么?
为什么小型对撞机不能完美阻挡球?
我该如何解决这个问题?
答案 0 :(得分:0)
很可能是因为球的速度足以在单个固定时间步后进入两个碰撞器。
尝试降低项目设置下的Fixed Timestep
值 - >时间和/或将球的刚体2D的Collision Detection
字段设置为Continuous
。