How to diagnose a performance problem, what Tick and spawning actually cost, why Blueprint makes it worse, how to tier tick rates, and the event-driven alternatives.
A repeatable workflow, before touching tick rates or spawn costs:
stat unit to see where the frame time is actually going.Frame: 28.5 ms
Game: 28.1 ms
Draw: 6.4 ms
GPU: 11.2 ms
Frame tracking Game closely, with both well above Draw and GPU, points at the CPU game thread — not rendering.
Tick runs every frame for every actor and component that has it enabled. Cost scales with count multiplied by per-frame work, so thousands of ticking actors — especially in Blueprint — is a classic performance killer.
Both tick once per frame by default — the same frequency. The difference is overhead.
Blueprint Event Tick runs through the Blueprint VM, a bytecode interpreter, making it roughly 10–50× slower than equivalent C++ for the same logic. The cost comes from per-node virtual calls, parameter marshaling, and graph traversal.
So keep any genuinely per-frame work in C++, not Blueprint.
// C++ constructor
PrimaryActorTick.TickInterval = 0.1f; // ~10x/sec instead of every frame
In Blueprint: set ActorTickInterval in the Details panel, or call Set Actor Tick Interval at runtime.
| Rate | What belongs there |
|---|---|
| Every frame | Things the player directly perceives — traces, movement |
| 0.1–0.2s | Perception checks, threat assessment |
| 0.5–1.0s | Squad coordination, pathing decisions |
| 2–5s | Ambient and idle-state decisions |
PrimaryActorTick.bCanEverTick = false; // constructor — never registers
SetActorTickEnabled(false); // runtime toggle
bCanEverTick = false is cheaper than a runtime toggle, because the actor is never registered with the tick system at all — there's nothing to skip over each frame.
Disable tick when it isn't needed, rather than leaving it on by default.
Spawning and despawning actors is expensive in its own right, separate from tick cost:
Pooling — reusing actors instead of destroying and respawning them — sidesteps all four costs at once, which is why it shows up so often for anything spawned in volume: projectiles, VFX, enemies.
Prefer reacting to events over polling every frame:
OnHitEvent Tick on top of them is a common and avoidable perf problem.
Answer out loud before re-reading the chapter.
stat unit tell you?