Quick answer: Place a Trigger Event On Die in the source emitter’s Update, name the event, and add a Spawn Event with the matching name to the downstream emitter’s Initialize block. Mismatched names silently drop events.

A rocket particle should trigger a secondary explosion emitter when it dies. The rocket dies as expected, but the explosion emitter never receives the event. The graph compiles without warnings. The wires look correct in the editor.

The GPU Event Pipeline

VFX Graph events are point-to-point connections between emitters with three pieces:

  1. Trigger block in the source emitter (e.g., Trigger Event On Die).
  2. Event name (string) on the trigger block.
  3. Spawn Event context in the downstream emitter with the same name.

The runtime matches by name. Typos in either side break the link silently — no compile error, no warning in the Output Log.

Fix 1: Verify the Event Pair

Open the VFX Graph asset. In the source emitter’s Update block:

Update Particle:
  ...
  Trigger Event On Die:
    Count = 1
    Event Name = "OnExplosion"

In the downstream emitter:

Spawn from Event:
  Event Name = "OnExplosion"

Click each block’s Inspector and verify the event names match exactly — case-sensitive, no leading/trailing whitespace.

Fix 2: Connect the Event Output Wires

The Trigger Event block exposes an output port; drag from it to the downstream emitter’s Spawn Event context input. Without the wire, the event is broadcast but nothing listens for it. The orange event wire is distinct from the white particle data wires — check it’s actually connected (the editor sometimes leaves dangling drags).

Fix 3: Capacity on Downstream

The Spawn Event has a Capacity. If the trigger fires more events than capacity per frame, the excess is dropped. For a rocket explosion that should spawn 64 sparks at the moment of death, the downstream emitter needs Capacity ≥ 64. Default capacity is 1024; bump it for high-burst scenarios.

Fix 4: Same Asset Required

GPU events only flow between emitters in the same VFX Graph asset. Two separate .vfx files can’t exchange GPU events — the runtime allocates per-asset event buffers. Merge them into one graph if cross-emitter events are needed, or use a CPU event via VisualEffect.SendEvent("name") from script.

Diagnosing via Debug Overlay

Open the VFX Graph editor, click the asset in your scene, and enable Window → Visual Effects → Debug. The overlay shows per-emitter active particle count and per-event drop count. Triggering the source and seeing event count climb but downstream particle count flat = events firing but downstream not spawning — usually capacity or name mismatch.

Verifying

Build a test scene with the rocket-explosion pair. Trigger the rocket, watch for the secondary effect. Use the Debug overlay to confirm events fire (number greater than zero on the trigger side) and spawn on the downstream side. If trigger increments but spawn doesn’t, name or capacity is wrong.

“GPU events are string-matched between blocks. One typo breaks the chain silently. Check both sides letter by letter.”

Use an enum or constant for event names across a graph to avoid typos — expose it via a Subgraph and reference everywhere.