Simple Rigidbody suspended by ConfigurableJoint jitters visibly and does not sleep in Unity 6+

I have a 2.5 physics game with a simple setup where a Rigidbody platform is suspended from the ceiling using a Configurable Joint with a Limit on its X and Y positions. It’s meant to act like a rope, but very very simple. Something like this:

I used to be on Unity 2022.3.25f1 and everything was fine. Since I have upgraded to Unity 6 however, this suspended platform has gotten very, very jittery. It shakes visibly and the character visibly shakes when standing on it.

I’ve just looked into it and noticed that even in the simple case of a cube suspended by a Configurable Joint with nothing else going on (just 1, without 2), does the following:

In Unity 2022.3.25f1:

Does not jitter. Rigidbody sleeps.

In Unity 6000.0.66f2:

Jitters visibly. Rigidbody does not sleep.

I have a few questions about this:

  • What change could have caused this behaviour to occur? My guess is the secret PhysX upgrade in Unity 6.0, it has caused problems for me before
  • Is there any chance of this being fixed in the short-term (say, within a year)
  • Are there any reasonable workarounds to fix this issue?

I don’t have very good ideas for how to work around this issue. I neither want to downgrade back to a years old Unity version nor do something like increase physics solver steps for the entire project (that would make physics slower for the entire game, I don’t think that’s worth it).

Surely if this simple use case goes wrong, physics-based games will notice even more problems in more advanced use cases?

I have filed a bug report. Issue link is here: https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-146852?target=_blank

I have a nice repro project. You can just press play and see that it’s stable, upgrade to Unity 6000.0.66f2, play again, and see that it’s not stable.

Suspended Physics Object Test.zip (285.6 KB)

Hey! thanks for filing I’m currently looking at that issue =)

Will circle back once I got a solution. But it looks like a parameter in the limit computation is being clamped incorrectly.

Cheers,
AlexRvn.

You’re a lifesaver! Thanks a lot Alex.

Not sure if my bug report went through, I reported it via the editor, and it said that it completed successfully but I never received a confirmation e-mail.

Let me know if you want me to report it via the website instead.

EDIT: I just received an email about the bug I reported so I have a link now: https://issuetracker.unity3d.com/product/unity/issues/guid/UUM-146852?target=_blank

No worries!

I’ve figured out what the issue was and got a fix in the pipe, thanks for reporting this!

Cheers,
AlexRvn.

That’s incredible, thank you Alex!