FloatingPawn AddMovementInput not working on default pawn class

I’m new to developing in Unreal Engine and have created a custom Pawn class to imitate an RTS camera using UFloatingPawnMovement. Currently the pawn is controlled with the WASD keys and the mousewheel to zoom, and it works fine when I spawn it into the scene and set the autopossess value on the pawn component.

I’ve read that the usual way to possess a default pawn is to set it in the gamemode and so I have attempted to do this by using the following code:

ARTSModeBase::ARTSModeBase()
{
	//Create the default pawn
	DefaultPawnClass = ACameraPawn::StaticClass();
}

Upon playing the game in the editor, the pawn is spawned in fine and I can scroll using the middle mouse, however I can’t control the horizontal movement. Using debug messages I have found that AddMovementInput() in my movement functions is not doing anything, despite the axis values being correct for the input I put in. Interestingly, this is fixed when I select the pawn that was created in the world outliner during runtime, so perhaps it’s somehow not possessed properly?

The complete .cpp file for the Pawn is below (sorry for the wall of code). Please let me know what I’m doing wrong!

// Sets default values
ACameraPawn::ACameraPawn()
{
	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	//Create Billboard to serve as parent
	UBillboardComponent* Billboard = CreateDefaultSubobject<UBillboardComponent>("Billboard");

	//Create movement component
	Movement = CreateDefaultSubobject<UFloatingPawnMovement>("PawnMovement");
	Movement->MaxSpeed = 5000.f;
	Movement->Acceleration = 10000.f;
	Movement->Deceleration = 10000.f;
	Movement->Activate();

	//Create and set up camera
	Camera = CreateDefaultSubobject<UCameraComponent>("Camera");
	ApplyCameraHeightAndRotation();
	

}

// Called when the game starts or when spawned
void ACameraPawn::BeginPlay()
{
	Super::BeginPlay();

}

// Called every frame
void ACameraPawn::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	//Maintain the height of the actor above the terrain via raycast
	MaintainActorHeight();
}

// Called to bind functionality to input
void ACameraPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAxis("MoveForward", this, &ACameraPawn::MoveForward);
	PlayerInputComponent->BindAxis("MoveRight", this, &ACameraPawn::MoveRight);
	PlayerInputComponent->BindAxis("CameraZoom", this, &ACameraPawn::MoveDown);
}


//Move forward/back
void ACameraPawn::MoveForward(float Value)
{
	AddMovementInput(FVector::ForwardVector, Value);

}

//Move left/right
void ACameraPawn::MoveRight(float Value)
{
	AddMovementInput(FVector::RightVector, Value);
	
}

//Move Up/down
void ACameraPawn::MoveDown(float Value)
{
	CameraHeight *= powf(1.1f, -Value);
	if (CameraHeight > CameraMaxHeight) {
		CameraHeight = CameraMaxHeight;
	}
	else if (CameraHeight < CameraMinHeight) {
		CameraHeight = CameraMinHeight;
	}

	ApplyCameraHeightAndRotation();

}

//Maintain the height of the actor above the terrain via raycast
void ACameraPawn::MaintainActorHeight()
{
	FHitResult* HitResult = new FHitResult();
	FVector StartTrace = GetActorLocation();
	FVector EndTrace = (-FVector::UpVector * 10000.f) + StartTrace;
	FCollisionQueryParams* TraceParams = new FCollisionQueryParams();
	if (GetWorld()->LineTraceSingleByChannel(*HitResult, StartTrace, EndTrace, ECC_Visibility, TraceParams))
	{
		float HeightOffset = HitResult->Distance - ActorHeight;
		SetActorLocation(GetActorLocation() - FVector::UpVector * HeightOffset);
	}
}

//Called when camera height changes to determine rotation
void ACameraPawn::ApplyCameraHeightAndRotation()
{
	Camera->SetRelativeLocation(FVector(CameraXOffset, 0.f, CameraHeight - ActorHeight));

	FVector FacingDirection = -Camera->RelativeLocation;
	Camera->SetRelativeRotation(FacingDirection.ToOrientationQuat());
}