player moves relative to camera?

hello, i have been trying to make a simple roll a ball game following the tutorials, but i later decided to make a full map myself. i then ran into some problems which i have semi fixed by making a patchwork of different tutorials. none, though have answered my latest problem, how do i make my player (a ball)
move forward, left, right and back relative to the camera position? (forwards is always away from the camera, right to the right etc, etc…)

here is my camera’s script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour {

public GameObject player;

private Vector3 offset;

public Transform lookAt;
public Transform camTransform;

private Camera cam;

public const float Y_ANGLE_MIN = 10.0F;
public const float Y_ANGLE_MAX = 10.0f;

private float distance = 5.0f;
public float currentX = 0.0f;
private float currentY = 0.0f;
public float sensitivitX = 4.0f;
public float sensitivityY = 1.0f;

// Use this for initialization
void Start() {
    offset = transform.position - player.transform.position;

    camTransform = transform;
    cam = Camera.main;

}

private void Update()
{
    if (Input.GetMouseButton(1))
    {
        currentX += Input.GetAxis("Mouse X");

        currentY += Input.GetAxis("Mouse Y");

        currentY = Mathf.Clamp(currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
    }
}

// Update is called once per frame
void LateUpdate() {
    transform.position = player.transform.position + offset;
    Vector3 dir = new Vector3(0, 0, -distance);
    Quaternion rotation = Quaternion.Euler(currentY, currentX, 0);
    camTransform.position = lookAt.position + rotation * dir;
    camTransform.LookAt(lookAt.position);
}
  } 

this is my player script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
public float currentX = 0.0f;

public float speed;

public Text countText;

public Text winText;

public int count;

public float threshold;

private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    count =  0;
    SetCountText ();
    winText.text = "";
}

void FixedUpdate()
{
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");
    currentX += Input.GetAxis("Mouse X");

    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

    rb.AddForce(movement * speed);

    movement = currentX * movement;

    if (transform.position.y < threshold)
    {
        transform.position = new Vector3(0, 0, 0);
        count = 0;
        SetCountText();
    }
}

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Pick Up")) {

        other.gameObject.SetActive(false);
        count = count + 1;
        SetCountText();
    }
}

void SetCountText ()
{

    countText.text = "count: " + count.ToString();

    if (count >= 12)
    {
        winText.text = "You Win!!!";
    }
}

}

does anyone have a solution???

thanks.

on this line Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

try

Vector3 movementX = Camera.main.transform.right * movementHorizontal;
Vector3 movementZ = Camera.main.transform.forward * movementVertical;
Vector3 movement = movementX + movementZ;