3

我有一艘船,那是Rigidbody. 船上有一个MeshCollider。这个对撞机被设置为凸的。

我已经有了以编程方式创建的基础Mesh。那个网格上有一个MeshCollider。这个对撞机没有设置为凸的。

大多数情况下,这是有效的。我不会从地板上摔下来。大约 40% 的时间我可以开车穿过墙壁。

为了解决这个问题,我为每个墙部分添加了一个GameObject标记为静态的子项。这GameObject有一个BoxCollider。我将对撞机的大小设置为比墙的截面大 0.1。这意味着对撞机重叠,并且不应该有可以掉下来的间隙。

正如你在下图中看到的那样,我仍然可以开车穿过墙壁。

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

在此处输入图像描述

我试过了:

  • 也将 a 添加Rigidbody到地面,标记为运动学。为此,我将MeshColliderall 一起删除并使用了 all BoxColliders。我不得不使用所有BoxCollider的 s,因为你可以有一个凸刚体。这并没有解决问题

  • 我从播放器中删除MeshCollider并使用单个BoxCollider. 此时MeshCollider场景中不再有任何 s。这并没有解决问题

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

我想知道 UNity3d 物理系统是否可以正常工作:/

4

2 回答 2

2

太多的事情可能是这些问题一一尝试,看看哪一个适合你。

  1. 如果你想使用带有凸面的Mesh Colliders,RigidBody 必须附加到它上面。将RigidBody 附加到两个 Object

  2. 因为您正在使用代码生成墙,所以请确保您分配给 Mesh Collider 的墙有<= 255 个三角形。Convex Mesh Colliders限制为255个三角形。如果墙的三角形> 255,凸面将失败

  3. 由于它有时会工作但有时会失败,因此将墙壁和船的RigidBody Collision Detection更改为Continuous Dynamic

  4. 使用复合碰撞器。移除船上的 Mesh Collider 并在您的船周围使用多个 Box Collider 以获得您想要的感觉。

于 2016-03-08T06:19:48.220 回答
0

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

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

于 2016-03-10T03:24:21.970 回答