Whoever figured out the forward movement component in relation to the camera is a genius, kudos. Even Nintendo had issues with that problem. Yup,
this bit :
const FVector CameraForward = Camera->GetForwardVector();
const float Dot = FVector::dotProduct(UpDirection, CameraForward);
if (FMath::Abs(Dot) < 1 - SMALL_NUMBER)
{
CurrentForwardDirection = FVector::VectorPlaneProject(CameraForward, GetActorUpVector());
}