PlayerController spawning and possesing new Character

Yea then it should only be the state machine.

Can you change your code to this:

void AMyCppController::SpawnMyCppCharacter()
{
	FActorSpawnParameters SpawnParameters;
	SpawnParameters.Owner = this;
	const FVector Location{FMath::RandRange(SpawnAreaMin.X, SpawnAreaMax.X), FMath::RandRange(SpawnAreaMin.Y, SpawnAreaMax.Y), GetPawn()->GetActorLocation().Z};

	if (AMyCppCharacter* NewMyCppCharacter = GetWorld()->SpawnActor<AMyCppCharacter>(MyCppCharacterClass, Location, GetPawn()->GetActorRotation(), SpawnParameters))
	{
		Possess(NewMyCppCharacter);
	}
}

Then debug again?

I’m not aware that it loses animations and physics by default without a controller, doesn’t make sense. Actors without the possibility of being controlled can still have physics. Please debug using the above code then we can continue from there.

First thing to debug is to set breakpoints on the Possess and inner methods and confirm that the old pawn is unpossessed properly and the new pawn is possessed properly so we can rule out any controller issues.