无法使用Unity 3D物理引擎防止球弹跳

3
我正在使用半径为1的球。球体具有质量为0.01的刚体。当我旋转地面时,球体因重力而移动(我还向球体添加了一个y:-1.5的常数力)。问题在于,当球快速运动时会反弹。我尝试调整物理材料(弹性= 0和不同的摩擦值)。如何防止球弹起并实现金属球的真实模拟?
编辑:我认为我已经找到了问题...地面由盒子制成(迷宫是自动生成的),因此似乎它们之间存在“凸起”...我使用一个大盒子作为地面进行了测试,并且它运行良好。
这就是问题:https://answers.unity.com/questions/568974/sphere-collider-catching-edges-of-aligned-cubes.html 所以我认为应该只对地面使用1个碰撞器,也许我可以使用此资产创建洞:https://assetstore.unity.com/packages/tools/modeling/csg-82197 ball bouncing

1
你尝试将基础地形的弹性设置为0了吗?此外,您能否发布应用在-y轴上的恒定力的代码?这可能会将您的球推向地面,而刚体将尝试抵消它,因为它无法进入实体对象。 - Remy
我正在使用内置的Constant Force脚本 https://docs.unity3d.com/Manual/class-ConstantForce.html如果我不在y轴上施加负力,那么当我旋转球体时,球就会飞出去。 - Sergio Viudes
4个回答

0

也许不是最有效的方法,但你可以尝试每帧进行一次光线追踪,并将球的位置设置为撞击点(减去球体半径)。虽然不太美观,但如果其他方法都失败了,这个方法还是可行的。


0

尝试增加物理材料中的质量和摩擦力,并不断测试,直到达到所需效果。 另一个提示:在刚体约束下,勾选“冻结位置——Y轴”或一般的上轴,这将防止球向上运动,也许会有所帮助。


增加质量没有帮助,冻结y轴位置也不行(如果这样做,地面在旋转时就无法将球向上推)。 - Sergio Viudes

0

通过使用以下属性,它可以正常工作:

Physics Material Propertiesenter image description hereenter image description here

我认为在 Y 轴上的恒定力不是必需的,事实上它可能会导致问题。

如果我移除恒定的力,那么当我旋转地面时球就会飞起来。我尝试增加重力,但效果与添加恒定力相同。在这里您可以看到当我移除恒定力时发生了什么:https://imgur.com/aMAQ6Bi - Sergio Viudes
你的配置存在问题。请确认你已经将物理材料分配给了两个对象(球和地面),并且按照我在截图中展示的设置了刚体属性。请记住,质量应该是真实的,例如如果球是1公斤,则地面应该是2000公斤(具体取决于大小)。 - gameDev_Unity
谢谢您的回答。我已经找到了问题(但仍然没有解决方案),请查看我的编辑后的问题。 - Sergio Viudes

-1

在刚体中,您始终可以使用约束。如果您在约束中勾选了“冻结Y轴位置/旋转”,则Y轴的移动或弹跳将不会发生。(这取决于您的基础水平/平面是否设置在XZ平面上)。

如果这不是一个选项,那么您可以尝试增加质量和重力,并不断向上方施加恒定的AddForce。

您还可以添加一个物理材料,减少反弹和摩擦力,就像其他提到的答案一样。


我无法冻结y轴,因为当地面旋转时球不会移动。 - Sergio Viudes
你尝试过通过创建和分配新的 PhysX 材质并增加物体质量来调整弹跳和摩擦力吗? - Chandradhar
我尝试增加质量和重力,并调整物理材料的值。但是它们都没有起作用。 - Sergio Viudes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接