alrighty
to get your skeletal mesh from a character class use GetMesh()
example:
USkeletalMeshComponent* SM = GetMesh();
if (SM)
{
do something;
}
Suggestion for facing the way you’re moving, this will have the effect that the player is now disconnected from the camera rotation though you’ll have to code the camera rotation separately, i use this in a isometric view so may not be 100% what you need but should get you started:
You can whack all this in the constructor of your character class:
For the spring arm component of the camera (in my code i’ve called it SpringComp obviously, you call it what you want or do these settings in blueprint instead):
SpringComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringComp"));
SpringComp->SetupAttachment(RootComponent);
SpringComp->bUsePawnControlRotation = false;
SpringComp->bInheritPitch = false;
SpringComp->bInheritYaw = false;
SpringComp->bInheritRoll = false;
SpringComp->TargetArmLength = 1000.0f;
SpringComp->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f)); //you probably won't need this bit unless you want an isometric view ;)
Character movement settings:
UCharacterMovementComponent* CM = GetCharacterMovement();
if (CM)
{
CM->RotationRate = FRotator(0.0f, 0.0f, 1000.0f); // I've set this really high so the rotation is pretty much instant - play with this to see what value works best for you
CM->bOrientRotationToMovement = true;
CM->bUseControllerDesiredRotation = true;
}
These are just character class settings:
bUseControllerRotationYaw = false;
bUseControllerRotationPitch = false;
bUseControllerRotationRoll = false;
Then if you want to swap to change the character to always face a certain direction whilst moving just change this:
GetCharacterMovement()->bOrientRotationToMovement = false;
And you’ll have to update the control rotation probably each tick aswell for example:
AController* PC = GetController();
if (PC)
{
PC->SetControlRotation(DirectionToTarget);
}
Using this method I believe it automatically uses the replication system aswell so works nice in multiplayer…well does for me i’m sure there’s probably better ways 
happy valentines day
EDIT:
Just thought not sure if your movement code would work with that setup so here’s my amended movement code from the character default, it just uses the camera rotation instead:
void AGCharacter::MoveForward(float Value)
{
if (CameraComp)
{
FRotator CamDirection = CameraComp->GetComponentRotation();
FRotator CamYaw = FRotator(0.0f, CamDirection.Yaw, 0.0f);
FVector MoveDir = CamYaw.Vector();
AddMovementInput(MoveDir * Value);
}
}
void AGCharacter::MoveRight(float Value)
{
if (CameraComp)
{
FRotator CamDirection = CameraComp->GetComponentRotation();
FRotator CamYaw = FRotator(0.0f, CamDirection.Yaw, 0.0f);
FVector MoveDir = FRotationMatrix(CamYaw).GetScaledAxis(EAxis::Y);
AddMovementInput(MoveDir * Value);
}
}