我知道有很多关于地形坠落的问题和答案。我确实看过它们,但我认为我拥有的这个与其他所有不同。我使用的是 Unity 版本 2019.4.15f1。
基本上,我得到了一个立方体和一个地形(没有图层设置,全部默认)。立方体有一个盒子碰撞器和一个启用了重力的刚体。地形只是一个简单的地形(没有树、没有草等),带有地形碰撞器和未检查重力的刚体。我希望立方体会撞到地形并停下来(或一起向下移动)。但是立方体直接穿过它(立方体在地面上方几米处,所以我确信立方体在时间 0 没有接触到地形)。现在,如果我从地形中移除 RigidBody 组件,立方体确实位于地形上。这是一个错误吗?我想不出我做错了什么(以下是此设置的屏幕截图)。
然后我继续做另一个测试,两个立方体,一个在另一个上面。使用上面提到的同一个立方体,我现在取消选中RigidBody 组件中的重力框。所以这个立方体可以自由地漂浮在空气中。正上方的另一个立方体具有完全相同的设置,但选中了重力框。正如预期的那样,顶部立方体落下,粘在底部立方体的顶部并一起向下移动。这证实了具有刚体和对撞机的两个对象确实相互作用。那么为什么地形和立方体不以相同的方式相互作用呢?它甚至没有在触发器上注册任何碰撞(我使用 onCollisionEnter 和 onTriggerEnter 进行检查)。如果有人可以照亮我,我将不胜感激。
[更新] 好的,经过一番挖掘和测试,我弄清楚了原因。地形不支持刚体(见下面的截图)。事实上,我也尝试在平面上应用相同的建议,并确认平面也不支持刚体。所以我认为这是因为地形不能采取物理行为。您可能可以变换或旋转它,但您不能例如让一个非常重的物体在一端跳跃并期望地形像跷跷板一样转动。您可以通过从 Unity 创建一个默认地形、一个刚体来重现以下错误,然后选中“是运动学框”,然后取消选中“是运动盒”。然后错误将从控制台窗口中出现。我希望 Unity 会自动在检查器本身中提示这个错误,而不是我试图摆弄但是哦..