BP-TICK-001
Flags Blueprints executing expensive operations on Event Tick. The problem isn’t Tick itself—it’s doing heavy work 60+ times per second per actor instance.
Why It Matters
Cost = Frequency × Multiplicity
A 0.3ms operation on Tick with 20 actors:
- 0.3ms × 60fps × 20 = 360ms/second = 6ms/frame
| Target | Frame Budget | Gameplay Headroom |
|---|---|---|
| 60 FPS | 16.67ms | ~5-8ms |
| 90 FPS (VR) | 11.11ms | ~3-5ms |
Modern UE5 features (Lumen, VSM, Nanite) already consume significant frame time.
When It’s Acceptable
- Time-critical gameplay: Fighting game input reading
- Physics integration: Custom physics sync
- Profiled and budgeted: You’ve measured it fits your budget
- Low actor count: Only 1-2 instances exist
The Fix
Option 1: Timers (Most Common)
Replace per-frame with interval:
Before: Event Tick → GetAllActors → Find nearest
After: Set Timer (0.5s, Looping) → GetAllActors → Find nearest
60 calls/sec → 2 calls/sec = 30× improvement
Option 2: Event-Driven
Replace polling with events:
Before: Event Tick → Get Health → Compare → Update UI
After: Bind to OnHealthChanged → Update UI
Zero Tick cost.
Option 3: Disable When Idle
OnCombatStart → Set Actor Tick Enabled (true)
OnCombatEnd → Set Actor Tick Enabled (false)
Expensive Operations
| Operation | Cost | Avoid on Tick |
|---|---|---|
| GetAllActorsOfClass | 0.2-0.5ms | Yes |
| LineTrace | 0.05-0.15ms | Limit frequency |
| Cast to Blueprint | 0.03-0.08ms | Cache result |
Configuration
Project Settings → Blueprint Health Analyzer → BP-TICK-001 → 15.0
Related
- BP-GETALL-001 — World queries
- BP-CAST-001 — Casts on Tick paths