Player movement 3D hack n Slash problems

I need to make a player movement depending of camera rotation, i can move forward from camera rotation but i have problems with the lateral movement and the character rotation to his direction.

public class PlayerController : MonoBehaviour
{
    
    public Camera cam;
    public float speedMove;

    private Vector3 camForward, movement;
    private float forwardMove, horizontalMove;

    
    void Start () {
	}
	
	void Update () {

        camForward = cam.transform.forward;
        forwardMove = Input.GetAxis("Vertical");
        horizontalMove = Input.GetAxis("Horizontal");

        camForward.y = 0;
        print(camForward);

        if (forwardMove != 0)
        {
            movement = camForward * forwardMove;
        }

        if (horizontalMove != 0)
        {
            transform.Translate(Vector3.right * horizontalMove * Time.deltaTime * speedMove, Space.Self);
        }

        transform.Translate(movement * speedMove * Time.deltaTime);
        

    }
}

This is the idea:

@Grabthesky, I’d suggest orienting a direction vector to that of the camera. Something like (untested code, off the top of my head proposal):

camForward = cam.transform.forward;
forwardMove = Input.GetAxis("Vertical");
horizontalMove = Input.GetAxis("Horizontal");

camForward.z = 0;

// camForward is now only the x/y orientation of the camera, 
// ignoring pitch, 
// calculate the angle

float camAngle = Vector3.Angle( Vector3.zero, camForward );
Quaternion q = Quaternion.Euler( 0, 0, camAngle );

// q is now a quaternion representing a Z axis rotation of the camera angle

Vector3 inputDir = new Vector3( forwardMove, horizontalMove, 0 );

// inputDir is a world space vector incorporating mouse input in the x/y plane

inputDir = q * inputDir;

// inputDir is now rotated by the camera angle, making the mouse controls camera oriented
// and can now be applied, with speed and deltaTime as the direction intended.

Or at least until the 3rd coffee kicks in that’s what I think.