Help with player movement

Hi, I’m new, and I found these scripts for player movement, but It doesn’t move the direction the camera does, also, it floats, help!

Mouse Handler:

using UnityEngine;



public class MouseHandler : MonoBehaviour

{

// horizontal rotation speed

public float horizontalSpeed = 1f;

// vertical rotation speed

public float verticalSpeed = 1f;

private float xRotation = 0.0f;

private float yRotation = 0.0f;

private Camera cam;



void Start()

{

cam = Camera.main;

}



void Update()

{

float mouseX = Input.GetAxis("Mouse X") * horizontalSpeed;

float mouseY = Input.GetAxis("Mouse Y") * verticalSpeed;



yRotation += mouseX;

xRotation -= mouseY;

xRotation = Mathf.Clamp(xRotation, -90, 90);



cam.transform.eulerAngles = new Vector3(xRotation, yRotation, 0.0f);

}

}

PlayerController:

using UnityEngine;



public class PlayerController : MonoBehaviour



{

CharacterController characterController;

public float MovementSpeed =1;

public float Gravity = 9.8f;

private float velocity = 0;



private void Start()

{

characterController = GetComponent<CharacterController>();

}



void Update()

{

// player movement - forward, backward, left, right

float horizontal = Input.GetAxis("Horizontal") * MovementSpeed;

float vertical = Input.GetAxis("Vertical") * MovementSpeed;

characterController.Move((transform.right * horizontal + transform.forward * vertical) * Time.deltaTime);







// Gravity

if(characterController.isGrounded)

{

velocity = 0;

}

else

{

velocity -= Gravity * Time.deltaTime;

characterController.Move(new Vector3(0, velocity, 0));

}

}

}

I’m not sure which behaviour you want to achieve. You could start with this really simple player movement and then change it step-by-step to get your desired movements.

public float speed;
public float turnSpeed;

void Update()
{
    var horizontalInput = Input.GetAxis("Horizontal");
    var forwardInput = Input.GetAxis("Vertical");

    transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
    transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}