🎮 Easy Monster Spawner

Professional Wave-Based Enemy Spawning System for Unreal Engine

v3.0.0 UE 5.3 – 5.7 C++ Plugin

🚀How To Use

Easy Monster Spawner works in two modes: TriggerBox mode (classic — spawn when player enters an area) or Standalone mode (place on any actor, trigger from Blueprint/C++). Here's how to set up both.

Option A — TriggerBox Mode (Classic)

1

Enable the Plugin

In Unreal Editor go to Edit → Plugins, find Easy Monster Spawner, enable it, and restart the editor.

2

Place a TriggerBox

From Place Actors → All Classes, drag a TriggerBox into your level. Scale it to cover the area where you want player entry to trigger spawns.

3

Add the Component

Select the TriggerBox, click +Add Component, search for "Monster Spawner" and add it.

4

Set Monster Class

In the Details panel under Classic Configuration, set Monster Class to your enemy Blueprint (e.g. BP_Zombie). Set Spawn Count, Spawn Pattern, and Spawn Radius.

5

Play!

Hit Play and walk into the TriggerBox. Monsters will spawn around it.

Tip: Enable Show Debug Visualization in the Debug category to see spawn locations as cyan spheres in the editor viewport.

Option B — Standalone Mode (NEW in v3.0)

1

Add to Any Actor

Add the Monster Spawner component to any actor in your level — an empty Actor, a Blueprint, a character, anything.

2

Set Activation Mode

In the Activation category, change Activation Mode to one of: Manual, Timer Auto-Spawn, or Begin Play.

3

Configure & Trigger

Set up your monster class and spawn settings as normal. For Manual mode, call TriggerSpawn() from your Blueprint or C++ code when ready.

If Activation Mode is set to TriggerBox but the owner actor is not a TriggerBox, the plugin automatically falls back to Manual mode and logs a warning.

Using the Wave System

1

Enable Waves

Check Use Wave System in the Wave System category.

2

Add Wave Entries

Click + on the Waves array to add wave configurations. Each wave has its own Monster Class, Spawn Count, Pattern, Effects, Formation, and Clear Requirements.

3

Optional: Wave Clear

In each wave's Clear Requirements, enable Require Wave Clearance. Set the kill percentage required before the next wave starts.

4

Optional: Loop

Enable Loop Waves and set Difficulty Scale Per Loop for infinite scaling encounters.

Blueprint Integration — Quick Example

// Trigger spawn from a gameplay event (e.g. button press)
Event AnyEvent
  → Get Component by Class (Monster Spawner v3.0)
    → TriggerSpawn()

// Check if all monsters are dead
Event Tick
  → Get Component by Class (Monster Spawner v3.0)
    → GetAliveMonsterCount()
      → Branch (Count == 0)
          → True: Open Door / Give Reward

Feature Overview

NEW v3.0

🔓 Standalone Mode

No TriggerBox needed. 4 activation modes: TriggerBox, Manual, Timer, BeginPlay.

NEW v3.0

🐉 Multi-Class Waves

Mix enemy types with weighted random selection per wave or classic mode.

NEW v3.0

♻️ Object Pooling

Reuse actors for performance. Pre-allocate, auto-expand, return to pool.

NEW v3.0

🌐 Multiplayer

Server-authoritative spawning with replicated state sync.

NEW v3.0

👁️ Spawn Conditions

Line of sight, "not looking" horror mode, min/max player distance.

NEW v3.0

🔊 MetaSound + Attenuation

USoundBase support (SoundCue, MetaSound, SoundWave) + 3D attenuation.

v2.5

💥 Spawn Effects

Niagara VFX + SFX for pre-spawn and post-spawn with configurable delay.

v2.5

⚔️ RTS Formations

8 formation types: Wedge, Line, Column, Square, Staggered, Phalanx, Circle, Scatter.

v2.5

💀 Wave Clear

Require kill percentage before next wave. Timeout with force-proceed option.

v2.5

🌀 New Patterns

Line, Arc, V-Shape, Spiral spawn patterns.

v2.0

🌊 Multi-Wave System

Sequential waves with per-wave config, delay, difficulty scaling, loop.

v1.0

🧠 Smart Spawn

Ground trace, NavMesh validation, overlap avoidance, ground alignment.

Activation Modes

Set via the Activation Mode property in the Activation category.

ModeHow It WorksOwner Requirement
TriggerBoxSpawns when a player-controlled character overlaps the TriggerBox. Classic v1.0 behavior.Must be ATriggerBox
ManualOnly spawns when you call TriggerSpawn() from Blueprint or C++.Any actor
TimerBasedAutomatically spawns on a repeating interval set by AutoSpawnInterval (seconds).Any actor
BeginPlaySpawns immediately when the game starts.Any actor
PropertyTypeDefaultDescription
ActivationModeESpawnActivationModeTriggerBoxHow this spawner is activated
AutoSpawnIntervalFloat30.0Seconds between auto-spawns (TimerBased only, 0.1–300)

⚙️Classic Configuration

Used when Use Wave System is disabled. Single-trigger spawning.

PropertyTypeDefaultDescription
MonsterClassTSubclassOf<AActor>NoneActor class to spawn (e.g. BP_Zombie)
ClassicMonsterClassesTArray<FMonsterClassEntry>[]Multi-class list with weights. If populated, overrides MonsterClass. v3.0
SpawnCountInt325How many monsters to spawn (1–100)
SpawnPatternESpawnPatternCircleSpawn placement pattern
SpawnRadiusFloat500Spawn area radius in cm (100–5000)
SpawnDelayFloat0.2Seconds between each monster spawn (0 = all at once)
DeactivationDelayFloat0.0Seconds before trigger deactivates after spawn starts
bFaceTriggerCenterBoolfalseRotate spawned monsters to face the trigger/owner center
AdditionalTagsForSpawnedMonstersTArray<FName>[]Tags added to every spawned monster

General Settings (both modes)

PropertyTypeDefaultDescription
bOneTimeOnlyBooltrueTrigger works only once?
SpawnHeightOffsetFloat50Z-offset above ground for spawn location (0–500 cm)

🌊Wave System

PropertyTypeDefaultDescription
bUseWaveSystemBoolfalseEnable multi-wave spawning
WavesTArray<FWaveConfiguration>[]Array of wave configs
bLoopWavesBoolfalseRestart from wave 0 after last wave completes
DifficultyScalePerLoopFloat1.2Multiplier for SpawnCount each loop (1.0–3.0)

FWaveConfiguration (per wave)

PropertyTypeDescription
MonsterClassTSubclassOf<AActor>Single monster class for this wave
MonsterClassesTArray<FMonsterClassEntry>Multi-class list (overrides MonsterClass if populated) v3.0
SpawnCountInt32How many to spawn (1–100)
SpawnPatternESpawnPatternSpawn placement pattern
SpawnRadiusFloatRadius in cm (100–5000)
SpawnDelayFloatDelay between each monster (0–10s)
DelayBeforeNextWaveFloatSeconds after this wave before next starts (0–60)
bFaceTriggerCenterBoolRotate to face trigger/owner center
MonsterTagsTArray<FName>Tags for this wave's monsters
bUseCustomEffectsBoolOverride global effects for this wave
CustomSpawnEffectsFSpawnEffectConfigPer-wave effects (if above is true)
bUseFormationBoolUse formation spawning for this wave
FormationConfigFFormationConfigPer-wave formation settings
ClearRequirementFWaveClearRequirementKill requirement before next wave

🐉Multi-Class Waves v3.0

Mix different enemy types in a single wave using weighted random selection.

FMonsterClassEntry

PropertyTypeDefaultDescription
MonsterClassTSubclassOf<AActor>NoneThe monster class
SpawnWeightInt321Relative weight (higher = more likely, 1–100)
MonsterTagsTArray<FName>[]Tags unique to this monster type

Example Setup

// 70% Skeletons, 20% Trolls, 10% Boss
ClassicMonsterClasses:
  [0] MonsterClass: BP_Skeleton, SpawnWeight: 7
  [1] MonsterClass: BP_Troll,    SpawnWeight: 2
  [2] MonsterClass: BP_MiniBoss, SpawnWeight: 1
If MonsterClasses (wave) or ClassicMonsterClasses (classic) is populated, it overrides the single MonsterClass field. You can use both in the same project — single class for simple waves, multi-class for variety waves.

🎯Spawn Patterns

9 patterns available via the ESpawnPattern enum:

CircleGridRandom SpawnPointsLineArc VShapeSpiralFormation

🔵 Circle

Evenly spaced around center at SpawnRadius distance. Great for surrounding the player.

📐 Grid

NxN grid within SpawnRadius. Perfect for organized formations.

🎲 Random

Random positions within SpawnRadius. Unpredictable encounters.

📍 Spawn Points

Uses child SceneComponents of the owner as custom positions. Falls back to Circle if none found.

➖ Line

Straight line across SpawnRadius×2 length.

🌙 Arc

180° arc at SpawnRadius distance.

✌️ V-Shape

V/arrow formation with leader at front.

🌀 Spiral

Outward spiral with 2 full rotations.

⚔️ Formation

Uses the RTS Formation System (see below).

⚔️RTS Formation System

8 formation types via EFormationType:

WedgeLineColumnSquare StaggeredPhalanxCircleScatter

FFormationConfig

PropertyTypeDefaultDescription
FormationTypeEFormationTypeWedgeWhich formation to use
UnitSpacingFloat150Distance between units (50–500 cm)
FormationFacingAngleFloat0Rotation offset from owner's forward (-180 to 180°)
bUnitsUseFacingDirectionBooltrueUnits face the formation direction
FormationDepthInt323Rows for multi-row formations (1–10)
WedgeAngleFloat45Wedge opening angle (15–90°)
RandomOffsetFloat0Random jitter for organic look (0–100 cm)

💥Spawn Effects

Enable with bUseSpawnEffects. Configure globally or per-wave.

FSpawnEffectConfig

PropertyTypeDescription
PreSpawnVFXTSoftObjectPtr<UNiagaraSystem>Niagara effect before monster appears
PostSpawnVFXTSoftObjectPtr<UNiagaraSystem>Niagara effect after monster spawns
PreSpawnSFXTSoftObjectPtr<USoundBase>Sound before spawn (SoundCue, MetaSound, SoundWave) v3.0
PostSpawnSFXTSoftObjectPtr<USoundBase>Sound after spawn v3.0
SoundAttenuationTSoftObjectPtr<USoundAttenuation>3D audio falloff settings v3.0
PreSpawnDelayFloatSeconds between pre-effect and actual spawn (0–5)
EffectScaleFloatVFX scale multiplier (0.1–10)
bAttachPostEffectToMonsterBoolAttach post-spawn VFX to the actor

👁️Spawn Conditions v3.0

Control where and when monsters can spawn relative to the player.

FSpawnConditions

PropertyTypeDefaultDescription
bRequireLineOfSightBoolfalseOnly spawn at locations visible to any player (not blocked by geometry)
bSpawnOnlyWhenPlayerNotLookingBoolfalseOnly spawn when no player is looking at the location (horror mode!)
PlayerLookAngleThresholdFloat60FOV half-angle to consider "looking at" (10–180°)
MinDistanceFromPlayerFloat0Minimum distance from any player (0 = no limit)
MaxDistanceFromPlayerFloat0Maximum distance from any player (0 = no limit)
Horror game tip: Set bSpawnOnlyWhenPlayerNotLooking = true + MinDistanceFromPlayer = 500 for enemies that appear behind you when you're not looking!

💀Wave Clear Requirements

FWaveClearRequirement

PropertyTypeDefaultDescription
bRequireWaveClearanceBoolfalseMust kill monsters before next wave?
RequiredKillPercentageFloat100% of monsters that must die (0–100)
MaxWaitTimeFloat0Timeout in seconds (0 = infinite)
bForceNextWaveOnTimeoutBooltrueForce next wave when timeout expires

♻️Object Pooling v3.0

Reuse actor instances instead of Spawn/Destroy for better performance with large waves.

PropertyTypeDefaultDescription
bUseObjectPoolingBoolfalseEnable pooling
InitialPoolSizeInt3210Pre-spawned hidden actors at BeginPlay (1–200)
MaxPoolSizeInt3250Maximum pool capacity (0 = unlimited)
bAutoExpandPoolBooltrueCreate new actors when pool is empty

How Pooling Works

  1. At BeginPlay, the pool pre-spawns InitialPoolSize actors hidden at (0,0,-10000).
  2. When spawning, the system first tries to reuse a pooled actor of the requested class.
  3. If pool is empty and bAutoExpandPool is true, a new actor is spawned (up to MaxPoolSize).
  4. If pool is exhausted and can't expand, falls back to standard SpawnActor.
  5. Call ReturnToPool(Monster) instead of Destroy to recycle the actor.

Pool Blueprint Functions

FunctionDescription
ReturnToPool(AActor*)Deactivate and return an actor to the pool
DestroyPool()Destroy all pooled actors (available + in use)
GetPoolAvailableCount()Number of ready-to-use actors in pool
GetPoolTotalSize()Total pool size (available + in use)

🌐Multiplayer Replication v3.0

PropertyTypeDefaultDescription
bEnableReplicationBoolfalseEnable server-authoritative spawning

When enabled:

🧠Smart Spawn System

PropertyTypeDefaultDescription
bUseGroundTraceBooltrueLine trace to find ground surface
GroundTraceDistanceFloat1000Max downward trace distance (100–5000 cm)
bUseNavMeshBooltrueValidate spawn on NavMesh (AI can navigate)
NavMeshQueryExtentFloat500NavMesh search radius (100–1000 cm)
bAvoidOverlapBooltruePrevent spawning on top of existing actors
MinSpawnDistanceFloat100Minimum distance between spawned monsters (50–500 cm)
MaxSpawnAttemptsInt3210Retries per monster to find valid location (1–50)
bAlignToGroundBoolfalseAlign rotation to ground normal (for slopes)

📘Blueprint Functions

FunctionTypeDescription
TriggerSpawn()CallableStart spawning (works in all modes)
HasBeenTriggered()PureReturns true if spawner was already triggered
ResetSpawner()CallableReset all state, re-enable trigger
GetAliveMonsterCount()PureNumber of alive monsters from this spawner
GetSpawnedMonsters()PureArray of all alive spawned actors
GetSpawnCenter()PureWorld location of spawn center (trigger or owner) v3.0
GetCurrentWaveIndex()PureCurrent wave index (0-based, -1 if not started)
GetTotalWaves()PureNumber of configured waves
IsWaveInProgress()PureTrue if currently spawning a wave
SkipToNextWave()CallableStop current wave, proceed to next
GetCurrentWaveKillPercentage()Pure% of current wave monsters killed
IsCurrentWaveCleared()PureTrue if kill requirement met
IsWaitingForWaveClear()PureTrue if waiting for player to clear wave
ForceClearWave()CallableForce-proceed to next wave
ReturnToPool(AActor*)CallableReturn monster to object pool v3.0
DestroyPool()CallableDestroy all pooled actors v3.0
GetPoolAvailableCount()PureAvailable pool actors v3.0
GetPoolTotalSize()PureTotal pool size v3.0

📡Blueprint Events (Delegates)

EventParametersDescription
OnWaveStartedint32 WaveIndexFired when a wave begins spawning
OnWaveCompletedint32 WaveIndex, int32 MonstersSpawnedFired when all monsters in a wave are spawned
OnAllWavesCompletedFired when the last wave finishes
OnWaveClearedint32 WaveIndex, float ClearTimeFired when kill requirement is met
OnMonsterSpawnedAActor* Monster, int32 SpawnIndexFired for each individual monster spawn
OnMonsterDiedAActor* DeadMonsterFired when a spawned monster is destroyed
OnMonsterReturnedToPoolAActor* PooledMonsterFired when a monster is returned to pool v3.0
OnSpawnFailedint32 MonsterIndex, FVector LocationFired when a spawn fails (no valid location) v3.0

🔍Debug & Visualization

PropertyTypeDefaultDescription
bShowDebugVisualizationBooltrueDraw spawn radius + preview points in editor
bShowSpawnValidationBoolfalseDraw green/red spheres during runtime for valid/invalid spawn attempts

All log messages use the LogMonsterSpawner category. Filter in Output Log with: LogMonsterSpawner

🔧Troubleshooting

Monsters Don't Spawn

Monsters Spawn Underground or Floating

Pool Not Working

Multiplayer Issues

Performance: Spawning 50+ monsters at once (SpawnDelay=0) can cause frame drops. Use a delay of 0.1–0.3s, or enable Object Pooling for large waves.