En tercera persona, normalmente WASD mueve al personaje según la orientación de la cámara.

Obtener direcciones de cámara

Vector3 forward = camara.forward;
Vector3 right = camara.right;

Eliminar el eje Y:

forward.y = 0f;
right.y = 0f;

forward.Normalize();
right.Normalize();

Convertir Input a dirección

Vector2 input = moveAction.action.ReadValue<Vector2>();

Vector3 direccion =
    forward * input.y +
    right * input.x;

Normalizar:

if (direccion.sqrMagnitude > 1f)
{
    direccion.Normalize();
}

Movimiento

controller.Move(
    direccion * velocidad * Time.deltaTime
);

Rotar hacia el movimiento

if (direccion.sqrMagnitude > 0.001f)
{
    Quaternion objetivo =
        Quaternion.LookRotation(direccion);

    transform.rotation = Quaternion.Slerp(
        transform.rotation,
        objetivo,
        velocidadRotacion * Time.deltaTime
    );
}

Resumen rápido

direccion =
    camara.forward * input.y +
    camara.right * input.x;

Acordate de eliminar Y antes de usar forward/right.