Quick answer: Unity Incremental GC producing a 30ms pause despite being incremental? Some allocations are 'unyielding' - profile with the Profiler's GC.Alloc column to find them.

GC enabled in 'Incremental' mode. Most frames are smooth; one frame in 10 spikes to 30ms.

Find allocation hotspots

Profiler > Memory > GC.Alloc. Sort by size; one row dominates.

Pool large allocations

Common culprit: list resizes inside hot loops. Pre-allocate; never resize during gameplay.

Tune incremental budget

GarbageCollector.incrementalTimeSliceNanoseconds = 500000;

Smaller budget = more pauses, each shorter. Trade frequency for amplitude.

“Incremental GC is a budget. The budget can't help an allocation that's bigger than the budget.”

Run the Profiler with GC.Alloc enabled during representative gameplay. Per-call site costs are visible; refactor in priority order.

Related reading