【问题标题】:How to prevent a Ridigbody from going through walls?如何防止 Ridigbody 穿过墙壁?
【发布时间】:2016-03-08 04:39:23
【问题描述】:

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

我已经掌握了以编程方式创建的Mesh。该网格上有一个MeshCollider。这个碰撞器没有设置为凸的。

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

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

如下图所示,有时我仍然可以开车穿过墙壁。

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

我试过了:

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

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

  • Rigidbodys 都设置为连续碰撞检测。

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

【问题讨论】:

  • 你如何移动这艘船?你是直接移动船的位置,还是使用像 AddForce 这样的 Rigidbody 方法?顺便说一句,别担心,Unity 的 3D 物理引擎“Nvidia PhysX”实际上非常强大。不幸的是,有很多错误可能归结为用户错误(这发生在我们所有人身上)。
  • @AquaGeneral - 我正在使用 Rigidbody.MovePositionRigidbody.MoveRotation 来制作船的运动。

标签: unity3d unity3d-5


【解决方案1】:

问题太多了,一一尝试,看看哪一个适合你。

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

  2. 因为您正在使用代码生成墙,请确保您分配网格碰撞器的墙具有 255 个三角形。凸网格碰撞器 限制255 个三角形。如果墙的三角形 > 255,凸面将失败

  3. 由于它有时会工作但有时会失败,请将墙壁和船的刚体碰撞检测更改为连续动态

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 2021-08-05
      • 2023-02-20
      • 1970-01-01
      • 2015-08-03
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多