Unity - 让一个球停止弹跳 / 不要突然贴到底部

4

目前我正在尝试在Unity中创建一个逼真的乒乓球。

enter image description here

到目前为止,没有问题。我分配了一个刚体和一个球形碰撞器。球形碰撞器得到了材料,在其中我将弹性设置为0.85(显然是标准实心地板上乒乓球的值)。
球很好地弹跳,但当它即将停下来时,问题就出现了。
最初,球会越来越低/越来越快地弹跳,直到最后“咔嚓”一声落到地面上(错过了人们所期望看到的最后几次弹跳)。

enter image description here

我读到这是因为物理设置中的“反弹阈值”。我认为默认值为2.0,所以我将其更改为0.6。
现在球不会被弹回地面,但是从这个最后的小高度开始,它也无法停止弹跳。
您可以从这张图片中参考,球继续弹跳的高度(球的比例应该相当准确,符合Unity的度量标准系统)。

enter image description here

我其实不明白为什么会这样,因为弹性已经设置为0.85了,难道每次弹跳时它的高度不应该降低15%吗?

额外信息:我已经尝试了一些方法,给地板也加上物理材质,弹性设置为0,调整摩擦参数等等,但似乎都没有任何效果。

我如何实现球的最后几次弹跳更像真实的,并让它更自然地停下来?

任何帮助将不胜感激。

谢谢您提前的帮助和祝好,

LilaQ


1
你调整了接触偏移量吗?默认接触偏移量:指定碰撞检测系统用于生成碰撞接触的距离。该值必须为正数,如果设置得太接近零会导致抖动。默认值为0.01。只有距离小于它们的接触偏移值之和的碰撞体才会生成碰撞接触。 - Korgrue
哦,好发现。的确是这样。我刚刚重置了物理设置(包括接触偏移量重新设为0.1),并将反弹阈值再次设为0.6(超过此值会使球从您在上一张图片中看到的高度直接弹到地面,这看起来非常奇怪)。但是,球仍然无法停止反弹,仍然以相同的高度弹跳 :/ - LilaQ
2
有一件事需要考虑,http://gamedev.stackexchange.com/ 的读者更可能熟悉Unity3D。你可以尝试在那里提问。 - Steven Hansen
谢谢Steven Hansen,我之前不知道SO的这一部分! - LilaQ
2个回答

6

您可以尝试在“编辑 -> 项目设置 -> 时间”中降低固定时间步值。这将增加物理仿真的准确性。例如,当反弹阈值为0.6时,固定时间步为0.005,我的测试球最终静止。


太棒了,这就解决了问题 - 谢谢!为了澄清,我们在这里增加物理计算每秒的步骤,以避免像我上面举的例子那样出现物理死角? - LilaQ
是的,减小固定时间步长会使每秒钟的步数增加。 - Gabriel Sibley
这个对我也起作用了,不过我不知道它会如何影响性能。 - Vinicius Victor

1

我确实遇到了这个问题,但是降低固定时间步值并不能解决我的问题,我在刚体组件中将Drag值更改为1,然后我的问题就解决了。


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