Quick answer: Sub-emitters referencing themselves (or forming a cycle with siblings) create exponential particle growth. Audit each sub-emitter reference chain, cap Max Particles per system, and reduce Inherit Lifetime to break the compound.

Here is how to fix Unity particle system sub-emitter infinite loop. You author a fireworks effect: main system spawns “rockets,” rockets spawn sparks on death via a sub-emitter. You hit play and watch a single firework launch — within a few seconds your frame rate dies and the game window fills with particles. You check Max Particles — set to 10,000. All used. The sub-emitter is eating itself.

The Symptom

Particle counts grow without bound. Frame rate drops as the simulator struggles with hundreds of thousands of active particles. Max Particles counts hit limit quickly. Visual: screen filled with explosions cascading outward. In the editor, the Particle System preview shows absurd particle counts despite a reasonable per-system burst value.

What Causes This

Self-referential sub-emitter. System A’s death sub-emitter is System A itself. Each dying particle spawns more A particles, each of which eventually dies and spawns more. Geometric growth.

Cyclic reference between systems. System A sub-emits System B. System B sub-emits System A. Each death triggers the other, forever. Harder to spot because the cycle spans two assets.

Inherit Lifetime multiplier compounding. Sub-emitter Inherit Lifetime at 1.0 means child lifetime = parent’s remaining lifetime. A 10-second rocket spawns 10-second sparks on death. Those sparks stay alive a long time, each of which spawns more particles during their lives if a Birth sub-emitter is configured — pile-up.

Burst with Emit Probability 1 and high particle counts. A sub-emitter with 50 particles per burst triggered by each death of a 50-particle parent fires 2500 children on the first generation. Chain to a second-level sub-emitter and you get 125,000 particles in a frame.

The Fix

Step 1: Audit sub-emitter references. For every Particle System with the Sub Emitters module enabled:

  1. Note the Particle System referenced in each sub-emitter slot
  2. Draw a directed graph: A -> B -> C (if A spawns B, B spawns C)
  3. Verify no cycles (A -> A or A -> B -> A)

Break any cycle by making the last system in the chain have no sub-emitters.

Step 2: Cap Max Particles as safety net. In each Particle System’s main module, set Max Particles to a reasonable cap:

Once the cap is hit, new particles do not spawn. Your effect looks truncated but performance does not collapse. Good safety net for when the artist (or code) pushes burst values too high.

Step 3: Tune Inherit Lifetime. On the sub-emitter module, each sub-emitter entry has an Inherit properties section. Set Inherit Lifetime to 0 (child uses its own startLifetime) or a small value like 0.3 (child gets 30% of parent’s remaining life).

Without inheritance, children live their own lifetime and die predictably. With high inheritance, children can outlive the original burst and keep triggering sub-emitters for seconds.

Step 4: Limit per-burst count. Sub-emitter bursts are multiplied by how many parent particles die. If you want 100 sparks per rocket and 10 rockets, do not set the sub-emitter burst to 100 (which would fire 100 per rocket = 1000 total). Instead:

Each rocket death fires 10 sparks. 10 rockets * 10 sparks = 100 sparks. Manageable.

Debugging Live Counts

Select the main effect in the scene during play. The Particle Effect panel shows live counts per system. Watch particle counts as the effect plays. Exponential growth visible here is the smoking gun.

You can also log counts from code:

void LateUpdate()
{
    foreach (var ps in GetComponentsInChildren<ParticleSystem>())
    {
        if (ps.particleCount > 500)
            Debug.LogWarning($"{ps.name}: {ps.particleCount} particles");
    }
}

“Sub-emitters are multipliers. Without caps, any cycle becomes exponential. Cap Max Particles; audit references; test long-running before shipping.”

Related Issues

For particle stop issues, see Particle Stop Not Stopping Immediately. For lit particle flickering, Lit Particle Flickering covers related effects bugs.

Draw the reference graph. Cap Max Particles. Inherit Lifetime low. No cycles.