It’s an old post, but I’ll complete the answer without copying all the function. You can avoid BaseMovement compensation by handling the case that your Character is attach to an actor like so :
void UMyCharacterMovementComponent::UpdateBasedMovement(float DeltaSeconds) {
if (CharacterOwner->GetRootComponent() == nullptr || CharacterOwner->GetRootComponent()->GetAttachParent() == nullptr)
{
Super::UpdateBasedMovement(DeltaSeconds);
}
else
{
return;
}
}