I’m trying to make a universal joint in Roblox using a BallSocketConstraint. I have both of its twist limits set to 0, so that all rotation in one end will be transferred to the other.
It works at mild angles, as you can see here in the gif. However, as the angles become sharper, the constraint becomes more resistant to rotation:
(Cursor included at the beginning to show that this behavior is not the gif looping.)
I’ve never attempted this before, so I’m not sure how it acted then, but I do believe this is a bug that needs to be fixed…
Yes this is expected, an ideal universal joint will stop to function when the angle approaches 90. You can see this from this formula:
Angular velocity transmitted becomes 0 when beta = 0. See Universal joint - Wikipedia
On another topic, consider using 3 parts and 2 hinges, like here:
You will notice less wobble and more stable velocity transmission.
Well, visually, that is what I was trying to mimic. I thought a ball socket constraint would also mimic this, but I don’t know? I guess it does, since at 90 degrees, rotating one end won’t transfer any rotation to the other.
Also, do you mean linking 2 universal joints together, so at 90 degrees, each joint is only at 45 degrees and still rotates fine?
Here’s my next question though, should a ball socket constraint work in such a way that rotation works freely at 90 degree angles? It’s inconvenient for me if it doesn’t, sure, but like you said, it’s how it should work in physics I suppose. The constraint does have a directionality that defines the axis of “twist”, so you could transfer rotation as if that axis were relative to the attachments… or something like that. Maybe I’m just explaining it wrong…