MoveRotation Does Not Always Use Pivot Point

MoveRotation used to consistently rotate a rigidbody around its pivot point in Unity 4.x, but after updating the project to 5, it sometimes rotates around the object’s center.

I have a parent object whose children extend out from the parent in a row. The parent’s position, at the end of the row, is the pivot point, and MoveRotation used to always rotate around the parent’s position. Now, if any constraints (freeze position or rotation) are set, MoveRotation’s pivot point is the middle of the row of children. If constraints are none, then it still rotates around the parent’s position at the end of the row.

The user is rotating the object, so it must stop moving if it hits something (which is why I’m using MoveRotation). The problem is, if I turn off FreezePosition, the object’s position drifts when it hits something. Also, without freezing rotation in the other two axes, the object’s rotation tends to drift in all axes even though MoveRotation is just rotating one axis. I’m not sure how to fix this and make it work like it used to.

I’ve narrowed it down to freezing X and Z positions. I can freeze rotation on 2 axes and freeze Y position, and MoveRotation rotates around the parent’s position. But if I freeze X and/or Z positions, it rotates around the center of the object.

Even if I reset the position every frame, if the non-kinematic rotating object bumps into something, it seems to impart a momentum, and it can start drifting after the user is no longer controlling the rotation. The best workaround I’ve come up with is freezing X/Z rotation and Y position, resetting the X/Z position every frame, and also setting velocity and angular velocity to zero after the object hits something. It was much simpler in Unity 4.