Quick answer: A GPUParticles2D needs Emitting on and a Process Material (a ParticleProcessMaterial) to draw anything. If it emits once and stops, One Shot is on. If it disappears when the node moves off-screen, enlarge the Visibility Rect. If it works on desktop but not on web or old devices, convert it to CPUParticles2D.
Particles have more required settings than most nodes, and missing any one of them produces the same result: nothing on screen. Check them in this order.
1. Emitting and the process material
- Emitting must be on. One-shot systems turn it off after they finish; set it back to true (or call
restart()) to fire again. - Process Material must be set. Without one, GPUParticles2D shows a warning icon and draws nothing. Create a new ParticleProcessMaterial.
2. Particles that exist but cannot be seen
- No texture draws small white squares, often 1 px. Assign a texture, or raise Scale Min/Max in the process material to check.
- Gravity defaults to (0, 98, 0), so particles fall away. With Direction and Initial Velocity at zero they drop straight down off the emitter.
- Lifetime too short: particles vanish before they move. Try 1 second.
- Color Ramp or Color with zero alpha makes particles invisible.
- Amount is the number of particles alive over one lifetime, not per second.
3. One shot and explosiveness
With One Shot on, the system emits amount particles once. For an explosion, also set Explosiveness near 1. To retrigger:
$Explosion.restart()
Changing amount or lifetime at runtime restarts the system, which can cut off particles already alive.
4. Visibility rect culling
GPUParticles2D is culled using its Visibility Rect, not its particles' real positions. If particles travel outside that rectangle, the whole system disappears when the rect goes off-screen. Select the node and use Particles > Generate Visibility Rect in the toolbar, or enlarge it manually.
5. Local vs world coordinates
With Local Coords off (the default), particles stay where they were emitted as the node moves — a trail. With it on, they move with the node. If particles seem to be "somewhere else", this is often why.
6. Renderer and platform support
GPU particles depend on renderer support. If particles work in Forward+ but not with the Compatibility renderer or on certain web/mobile devices, select the node and use Convert to CPUParticles2D. CPUParticles2D supports nearly all the same settings and runs everywhere.
7. Hidden behind something
Particles obey normal draw order: z_index, tree order and canvas layers. A background drawn later in the tree, or on a higher CanvasLayer, hides them.
First-emission stutter in exports
If particles appear but cause a hitch the first time they play in an exported build, it is shader compilation. Emit each effect once off-screen during a loading screen to warm it up.