How do I Freeze Rotation Z without the entire physics system breaking?

I am stuck between a rock and a hard place.

I don’t want to write my own physics engine, or buy someone else’s most-likely buggy in some other unforeseen way physics engine from the marketplace.

I am using unity’s Rigidbody2D physics.

If you check OFF Freeze Rotation Z, the physics works as expected, however all of the object’s children components also rotate with the parent.

If you check ON Freeze Rotation Z, the entire physics system stops working. An object that hits a surface will bounce along the surface’s normal vector instead of relative to the angle from which it hit the surface. Completely unusable.

How do I fix it so I can have the behaviour of Freeze OFF with Freeze ON?

It is not enough to ‘just write a script that locks the Z rotation of every child’ because I have all kinds of other circumstances where I DO want the children to rotate, and it would be basically a total re-write full of potentially easily fucked up bugs trying to constantly lock and unlock the Z rotation.

This seems to me like an expected behavior. I think the correct thing to do would be to not attach those objects to the parent and find another way to keep them together.

Freezing the rotation of the children doesn’t seem like a big deal, just add a component to those you want to freeze, then you’ll be able to easily parse them in a script and activate rotation freeze.

This makes no sense at all. A bounce is not related to a body rotating. A bounce is related to the normal angle of the surface hit, not the surface hitting it. How it’s rotated makes zero difference.

I think you’ll have to explain it because you’re describing a basic thing. Describe in real components what you’re talking about “child objects” could mean anything.

Also, you might want to tone the language down, you sound pretty angry but you’re trying to get help. Just describe your problem clearly and you’ll get help.