如何防止Ridigbody穿过墙壁?

时间:2016-03-08 04:39:24

标签: unity3d unity3d-5

我的船只有Rigidbody。该船上有一个MeshCollider。该对撞机设置为凸面。

我已经了解了以编程方式创建的Mesh。 Mesh上有一个MeshCollider。此对撞机未设置为凸面。

大多数时候,这都有效。我不会摔倒在地。大约40%的时间我可以穿过墙壁。

试图解决这个问题,对于每个墙部分,我添加了标记为静态的子GameObject。此GameObject上有BoxCollider。我将对撞机的尺寸设置为比墙壁的截面大0.1。这意味着碰撞器重叠,并且不应有间隙通过。

正如您在下图所示,我仍然可以在墙上开车一段时间。

我该怎么做才能开车穿过墙壁?

enter image description here

我试过了:

  • 也将Rigidbody添加到地面,标记为运动学。为此,我将MeshCollider全部删除,并使用了所有BoxCollider。我必须使用所有BoxCollider,因为你可以拥有一个凸起的刚体。 这并没有解决问题

  • 我从播放器中删除了MeshCollider并使用了一个BoxCollider。此时,场景中不再有MeshCollider个。 这并没有解决问题

  • 两个Rigidbody都设置为连续碰撞检测。

我很想知道UNity3d物理系统是否有效:/

2 个答案:

答案 0 :(得分:1)

太多的事情可能是一个接一个的问题,看看哪个适合你。

  1. 如果你想将网格碰撞器与凸面一起使用,必须将RigidBody附加到它上面。将 RigidBody附加到对象

  2. 由于您使用代码生成墙,因此请确保为分配网格对撞机的墙具有< = 255 三角形。 Convex Mesh碰撞 限制 255个三角形。如果墙的三角形> 255,凸起失败

  3. 由于它有时可以工作但有时会失败,所以将墙和船的 RigidBody碰撞检测更改为连续动态

  4. 使用复合碰撞器。移除船上的网格对撞机,并在您的船上使用多个Box Colliders,以获得您想要的感觉。

答案 1 :(得分:0)

调整固定和最大允许时间步长。我将“固定时间戳”设置为0.0005

http://docs.unity3d.com/Manual/class-TimeManager.html