How can I get the velocity of an object in relation to the world?

All I can find are local velocity questions. Well I’ve been using


in my player’s script to make my camera adjust its speeds according to the player.

Then I’ve been using

	void Update () 
		xPosition = player.transform.position.x;
		yPosition = player.transform.position.y + 5f;
		zPosition = player.transform.position.z - 14f;
		xPosMulti = 1f + (playerScript.playerVel.x * 0.0001f);
		yPosMulti = 1f + (playerScript.playerVel.y * 0.0001f);
		zPosMulti = 1f + (player.rigidbody.velocity.magnitude * 0.01f);

		transform.position = new Vector3(xPosition * xPosMulti, yPosition * yPosMulti, zPosition * zPosMulti);


in my camera. It works really well, even if it’s a little too jumpy for me (Any way to make it feel more springy?), except that it “Looks” the wrong way when my player (Which is just a cube) is upside down. I want to cube to be able to rotate, so locking its z rotation isn’t an option.

Further details: It’s a side-scrolling game with a cube as a player. The camera follows the cube and when the cube goes faster, the camera looks further in that direction. Unfortunately, when the cube is upside-down, the camera looks backward instead of forward. I assume this is because my “transform.Inverse etc” line is measuring the velocity of my player in relation to its direction, not the direction in the world. How do I fix this?

Just don’t use “transform.InverseTransformDirection.” Make it only “rigidbody.velocity.”