Make a pawn move to a given location

I want to give my pawn a movement command to move to a given location. Like a unit command in an RTS.

Setup

One big NavMeshBoundsVolume in the level.

As character

I’ve got this working with the pawn as a character, because that comes with a default character movement component. This even does pathfinding around other objects.

class AVillager : public ACharacter { ... }

empty custom AI controller:

class AVillagerAIController : public AAIController {}

setting the controller in construction:

AVillager::AVillager()
{
  ...
  AIControllerClass = AVillagerAIController::StaticClass();
  AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
  AutoPossessPlayer = EAutoReceiveInput::Disabled;
}

move command:

void AVillager::MoveTo(AActor * actor)
{
  AController * controller = GetController();
  AVillagerAIController * villagerAIController = Cast<AVillagerAIController>(controller);
  villagerAIController->MoveToActor(actor);
}

Custom pawn movement

Now I’m trying to do the same with a custom PawnMovementComponent. These 2 tutorials have been good starting points: Configuring Input and Creating a Pawn Movement Component and Creating a movement component for pawn.

Villager as pawn:

class AVillager : public APawn 
{
  ...
  UVillagerMovementComponent * villagerMovementComponent;
  virtual UPawnMovementComponent* GetMovementComponent() const override;
}

Custom movementcomponent:

class UVillagerMovementComponent : public UPawnMovementComponent 
{
  virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
}

The TickComponent example from the docs uses ConsumeInputVector() to move the pawn. I’m not looking for direct player input, but for the AI Controller to give the pawn commands.
I’ve been through the AIController::MoveToActor() function, but can’t find where that sets Velocity on a move component or some other movement value. But that one function call is enough to make the character movement work.

What do I need in my custom PawnMovementComponent to make the pawn respond to MoveTo functions from the AI controller? Or do I need my own movement code inside the pawn, with the AI controller only for pathfinding?

Extra question: can you setup a movement component without using the tick function for performance? When I disable bCanEverTick on the villager pawn, the movement component doesn’t seem to care. Would this setup scale to 100+ pawns running around to different destinations?