【问题标题】:Can't prevent a ball from bouncing using Unity 3D physics无法使用 Unity 3D 物理防止球弹跳
【发布时间】:2019-12-16 10:27:20
【问题描述】:

我正在使用大小为 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

【问题讨论】:

  • 您是否尝试过将底层地形的弹性也设置为 0?您还可以发布在 -y 轴上施加恒定力的代码吗?它可能会将你的球推入地面,然后刚体会尝试反击,因为它无法进入固体物体
  • 我正在使用内置的恒力脚本docs.unity3d.com/Manual/class-ConstantForce.html 如果我不在 y 轴上施加负力,那么当我旋转圆时球会飞

标签: unity3d physics


【解决方案1】:

尝试增加质量,改变物理材料中的摩擦力,继续测试,直到你得到你想要的。 另一个提示:在 Constraints 下的 Rigidbody 上,勾选“Freeze Position -- Y-axis”或一般的上轴,这将防止球上升,也许这会有所帮助

【讨论】:

  • 增加质量没有帮助,也没有冻结y位置(如果我这样做,那么旋转时地面无法推动球)
【解决方案2】:

使用以下属性可以正常工作:

我认为Constant force on Y 不是必需的,或者实际上这会导致问题。

【讨论】:

  • 如果我去掉恒力,那么当我旋转地面时球会飞。我试图增加重力,但这与增加恒定力的效果相同。在这里你可以看到当我移除恒力时发生了什么:imgur.com/aMAQ6Bi
  • 您的配置有问题。确认您已将物理材质分配给两个对象(球和地面),并设置刚体属性,如屏幕截图所示。记住质量应该是现实的,例如如果球是 1 公斤,那么地面应该是 2000 公斤(取决于大小)。
  • 感谢您的回答。我找到了问题(但仍然没有解决方案),请查看我编辑的问题,
【解决方案3】:

也许不是最有效的方法,但您可以尝试向下进行光线追踪并将球的位置设置为每帧的命中位置(减去球体半径)。它并不漂亮,但如果一切都失败了,它会成功的。

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

    • 我无法冻结 y 轴,因为地面旋转时球不会移动。
    • 您是否尝试通过创建和分配新的 physx 材料并增加质量来调整反弹和摩擦?
    • 我尝试增加质量和重力,并调整物理材质值。但它们都没有奏效。
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2014-08-17
    • 2013-05-23
    • 2016-07-24
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多