Make a rolling sphere turn around in one frame

I have a sphere as my main player object, which is able to roll around, controlled by the w, a, s, and d keys. I’ve built a tunnel which the ball rolls through and my goal is to have the ball roll down the tunnel and at the other end they are actually back where they started. Kind of like a mental trick. Roll down one way, and you end up rolling towards the same end. I don’t want it to be visible either. So far, I’ve been working on trying to rotate the camera around 180 degrees, and reversing the balls velocity in the direction of the tunnel, in my case it is on the z axis. My problem is that the balls rotation isn’t smooth. You can see the ball start rolling the other direction, and my idea is that it shouldn’t look like anything happened. Just reverse the direction of the ball and camera. If there’s another way to accomplish this that would be awesome. Or if I could rotate the ball perhaps keeping the velocity that would be ok but I can’t find a good way to do it.This is the code I’m using to move the ball around but like I said, you can still see rotation slowing down, then going the other way

Vector3 tempV = player.rigidbody.velocity;
tempV.z *= -1;
player.rigidbody.velocity = tempV;
float distance = Mathf.Abs(gameObject.transform.position.x) - Mathf.Abs(player.transform.position.x);
Vector3 newPos = player.transform.position;
newPos.x += distance * 2;
player.transform.position = newPos;
cameraRotator.Rotate(new Vector3(0.0f, 1.0f, 0.0f) * 180);

Not tested, but player.rigidbody.angularVelocity *= -1; should do something interesting. The angularVelocity part works – it’s just the times -1 I’m not sure about.

It’s the same idea as your first two lines, flipping velocity. I think, if the ball is mostly rolling along the Z-axis, that angularVelocity is mostly on X (it’s spinning around X.)