# Single/Periodic Burst Menu Path: - **Spawn > Single Burst** - **Spawn > Periodic Burst** The Single/Periodic Burst Block spawns a number of particles instantly either once, or periodically using a delay. When this Block triggers a burst of particles to spawn, it increments the [spawnCount](https://docs.unity3d.com/Documentation/ScriptReference/VFX.VFXSpawnerState-spawnCount.html) instantly. If you change the **Repeat** setting to **Periodic**, this Block changes its name to **Periodic Burst** and spawns bursts of particles after a delay. ## Block compatibility This Block is compatible with the following Contexts: - [Spawn](Context-Spawn.md) ## Block settings | **Setting** | **Type** | **Description** | | -------------- | -------- | ------------------------------------------------------------ | | **Repeat** | Enum | **(Inspector)** The mode this Block uses to determine whether to trigger the birth only once or repeat it after a delay. The options are:
• **Single**: The Block spawns a single burst of particles.
• **Periodic**: The Block spawns multiple bursts of particles. After it spawns a burst of particles, it waits for the time you specify in **Delay** and spawns another burst. | | **Spawn Mode** | Enum | The mode this Block uses to determine how many particles to spawn. The options are:
• **Constant**: This Block spawns a specific number of particles. You can set this number in the **Count** property.
• **Random**: This Block spawns a random number of particles between two boundaries. If you select this mode, the **Count** property becomes a Vector 2 where the x-axis represents one boundary value and the y-axis represents the other boundary value. | | **Delay Mode** | Enum | The mode this Block uses to determine how to calculate a delay time for use between bursts. The options are:
• **Constant**: The delay time is of a specific duration. You can set the duration in the **Delay** property.
• **Random**: The delay time is of a random duration between two boundaries. If you select this mode, the **Delay** property becomes a Vector 2 where the x-axis represents one boundary value and the y-axis represents the other boundary value. | ## Block properties | **Input** | **Type** | **Description** | | --------- | ------------- | ------------------------------------------------------------ | | **Count** | float/Vector2 | The number of particles to spawn.
If you set **Spawn Mode** to **Constant**, this property is a float type and the value you set is the specific number of particles to spawn.
If you set **Spawn Mode** to **Random**, this property is a Vector 2 where the x-axis represents one boundary value and the y-axis represents the other boundary value. When spawning a burst of particles, this Block uses a random number between these two values to determine how many particles to spawn. | | **Delay** | float/Vector2 | The duration of the delay this Block waits for before it spawns a burst of particles.
If you set **Delay Mode** to **Constant**, this property is a float type and the value you set is the specific delay duration this Block waits for between particle spawns.
If you set **Delay Mode** to **Random**, this property is a Vector 2 where the x-axis represents one boundary value and the y-axis represents the other boundary value. When the Block initiates a delay, it uses a random number between these two values to determine the delay duration. | ## Remarks You can emulate the single burst behavior with the following equivalent custom spawner callback implementation: ```C# class SingleBurstEquivalent : VFXSpawnerCallbacks { public class InputProperties { public float Count = 1.0f; public float Delay = 2.0f; } static private readonly int countID = Shader.PropertyToID("Count"); static private readonly int delayID = Shader.PropertyToID("Delay"); public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { } private float m_NextBurstTime; private bool m_Sleeping; public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { if (state.newLoop) { m_NextBurstTime = vfxValues.GetFloat(delayID); m_Sleeping = false; } if (!m_Sleeping && state.playing && state.totalTime >= m_NextBurstTime) { state.spawnCount += vfxValues.GetFloat(countID); m_Sleeping = true; } } public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { } } ``` You can emulate the periodic burst behavior with the following equivalent custom spawner callback implementation: ```C# class PeriodicBurstEquivalent : VFXSpawnerCallbacks { public class InputProperties { public float Count = 1.0f; public float Delay = 2.0f; } static private readonly int countID = Shader.PropertyToID("Count"); static private readonly int delayID = Shader.PropertyToID("Delay"); public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { } private float m_NextBurstTime; public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { if (state.newLoop) { m_NextBurstTime = vfxValues.GetFloat(delayID); } if (state.playing && state.totalTime >= m_NextBurstTime) { m_NextBurstTime += vfxValues.GetFloat(delayID); state.spawnCount += vfxValues.GetFloat(countID); } } public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { } } ```