so you want to rotate towards something?
How about the RotateTowards function 
if you dont want to set a max speed you could just use slerp
feed it the from and the to and it’ll make it happen
transform.rotation = quanternion.slerp(quanternion from, quanternion to);
now you still need to get the to and the from and have them in quanternion form.
we know we want to rotate from the front of the player to the front of the camera.
actually since you want the the front to face the front you really just want the players rotation to match the cameras. So we can shortcut getting vectors and turning them into quanternions and go straight to
transform.rotation = quanternion.slerp(player.transform.rotation, camera.transform.rotation);
you want to move in a direction relative to the camera.
Well direction is a vector. and the vectors relative to a gameobject are stored in its transform.
camera.transform.forward is a vector which points from the center of the camera directly forward (it can be thought of as passing through the point in the middle of the screen.
-camera.transform.forward is the inverse. A negative sign reverses the direction basically.
forward becomes backward.
with camera.transform.right,camera.transform.up,camera.transform.forward and the negative sign we can get all 6 directions of movement and we can move an object in those directions.
if we’d like we can normalize those vectors. A normalized vector is basically the slope of the line.
its as if the center of the object is 0,0,0 and not wherever it is in world space.
if we just add that vector to an existing position we move in the same direction as that line. except with respect to the current objects position.
So we could do
player.transform.position += camera.transform.forward.normalized;
and bam its moving parallel to the camera.
there are other ways as well you dont have to normalize you can you transformdirection but the end result is the same. Look up transformdirection in unity script reference for more details on that.
Mark as answered.