transform.up = _rb.velocity.normalized;
Currently I am using the above to align the players rotation to the direction of the velocity.
This causes problems with the physics system so I decided to use the Rigidbody in order to change the rotation.
_rb.MoveRotation(Quaternion.LookRotation(_rb.velocity.normalized));
While the player does rotate in the direction of travel, it is offset so that the front of the player moves in the correct direction, while the top of the player does not.
The player moves as the following when using Rigidbody
When I need
I have used Quaternion.AngleAxis to rotate the vector, which did not work and the player did not rotate at all.
I've also used Quaternion.Axis with some additional code to make it a 0-360 range, this also did not work.
rb.MoveRotation(Quaternion.FromToRotation(Vector3.up, rb.velocity));
This code creates a Quaternion that rotates the untransformed object "up" in the direction of the Rigidbody velocity. The result will be that your character will fly headfirst in the specified direction. The direction that your character looks in is unspecified.