How to spawn N actors on every tick

Hi!

I have to spawn a lot of actors, around 8k, but when I do it, it freezes the game.

Someone has suggested me to spawn 10 every tick, but I don’t know how to do it: I know how to spawn ten, but I don’t know how to spawn them every tick.

How can I do it?

Here?

void MyActor::Tick(float DeltaSeconds)
{
   Super::Tick(DeltaSeconds);
}

Thanks!

ccp

header

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class SPAWNPROJ_API AMyActor : public AActor
{
	GENERATED_BODY()
	
public:	

	AMyActor();

protected:

	virtual void BeginPlay() override;

public:	

	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int maxActorsToSpawn = 8000;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int spawnPerTick = 10;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UClass* ActorToSpawnClass;

	//UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FActorSpawnParameters SpawnParams;

private:
	TArray<AActor*> SpawnedActors;
	

};

cpp


#include "MyActor.h"

AMyActor::AMyActor()
{
	PrimaryActorTick.bCanEverTick = true;
}


void AMyActor::BeginPlay()
{
	Super::BeginPlay();
}

void AMyActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	if (SpawnedActors.Num() < maxActorsToSpawn) 
	{
		for (int i = 0; i < spawnPerTick; i++) 
		{
			if (SpawnedActors.Num() == maxActorsToSpawn) {
				break;
			}				
			AActor* SpawnedActor = GetWorld()->SpawnActor<AActor>(ActorToSpawnClass, GetTransform(), SpawnParams);
			SpawnedActors.Add(SpawnedActor);
		}
	}


}

1 Like