Now forced to force call BeginPlay with NewObject

I confirm it works well with GetWorld SpawnActor.

Here is the revised code:

// TODO: Consider using WorldSubsystem 
// Called when the game starts or when spawned
void ASpawnerSupervisor::BeginPlay()
{
    Super::BeginPlay();
    
    // Clear singleton
	ASpawnerSupervisor::ASSp_SpawnerSupervisor = nullptr;
    // Reset singleton
    GetSS();
	

	ASSSLM1p_SpawnerSpaceShipLegionMark1 = Cast<ASpawnerSpaceShipLegionMark1>(OnDemandSpawn(ASpawnerSpaceShipLegionMark1::StaticClass()));
	ASPUHp_SpawnerPowerUpHeal = Cast<ASpawnerPowerUpHeal>(OnDemandSpawn(ASpawnerPowerUpHeal::StaticClass()));
	ASPUCWp_SpawnerPowerUpChangeWeapon = Cast<ASpawnerPowerUpChangeWeapon>(OnDemandSpawn(ASpawnerPowerUpChangeWeapon::StaticClass()));

    ASPUHp_SpawnerPowerUpHeal->ScheduledSpawn();
	ASPUCWp_SpawnerPowerUpChangeWeapon->ScheduledSpawn();

} 

AActor* ASpawnerSupervisor::OnDemandSpawn(TSubclassOf<AActor> TSOAAv_ActorClass)
{
    if (TSOAAv_ActorClass)
    {   
        
        FTransform FTv_SpawnTransform;
		
        FActorSpawnParameters FASPv_SpawnParams;
        FASPv_SpawnParams.Owner = this;
        FASPv_SpawnParams.Instigator = GetInstigator();

        AActor* AAp_SpawnedActor = GetWorld()->SpawnActor<AActor>(TSOAAv_ActorClass, FTv_SpawnTransform, FASPv_SpawnParams);
        if (AAp_SpawnedActor)
        {
           return AAp_SpawnedActor;
        }
        else
        {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("AAp_SpawnedActor not spawned"));
           return nullptr;
        }
    }
    else
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("AAp_SpawnedActor not set!"));
    }
    return nullptr;
}