Tick controls and frame order

Mock Q6 parts 1–2 (Partial / Miss) + the timer trap from Q5 · 9 min

In one breath

Tick isn't the enemy; unnecessary per-frame work is. You control whether something ticks (bCanEverTick, enable/disable), how often (TickInterval) and when in the frame (tick groups, prerequisites). Get "when" wrong and one thing follows another a frame late: that's drift.

The controls

ControlDoes
PrimaryActorTick.bCanEverTickWhether a tick function is registered at all. False = it can never be enabled later.
bStartWithTickEnabledRegistered, but starts off.
SetActorTickEnabled(bool)Toggle at runtime: tick only while needed.
TickInterval / SetActorTickIntervalEvery N seconds. Still scheduled by the tick system, in its group.
TickGroupWhen in the frame it runs.
AddTickPrerequisiteActor/Component"Tick me after that."
Components tick separatelyDisabling the actor's tick does not stop its components. Each has PrimaryComponentTick. Common gotcha.
bTickEvenWhenPausedPause behaviour.
UTickableWorldSubsystem / FTickableGameObjectTick something that isn't an actor.
Significance Manager, anim "only tick when rendered"Less work for far or off-screen things.

WadOfGore: the base character sets bCanEverTick = false (good). The weapon base sets it true with no Tick (wasteful: see the weapon page).

Frame order

TG_PrePhysics → TG_StartPhysics → TG_DuringPhysics → TG_EndPhysics
             → TG_PostPhysics → TG_PostUpdateWork → TG_LastDemotable

The physics step runs between StartPhysics and EndPhysics. Kinematic things physics must see (moved collision) go in PrePhysics. Things that should see this frame's physics results (a camera following a ragdoll) go in PostPhysics.

The drift question, rephrased

"Within one frame, which updates first, the particles or the collision following them? If collision reads particle positions before Niagara updates, it's always one frame behind. That lag is the drift."

The same bug in miniature: WadOfGore's hero anim instance reads a value the thread-safe update writes later in the same frame.

The timer trap (from Q5)

Quiz yourself

bCanEverTick = false: can you call SetActorTickEnabled(true) later?

No. The tick function was never registered. Use bCanEverTick = true + bStartWithTickEnabled = false if you want to toggle.

You disable an actor's tick. Do its components stop ticking?

No. Components have their own tick functions.

List the tick groups in order.

PrePhysics → StartPhysics → DuringPhysics → EndPhysics → PostPhysics → PostUpdateWork → LastDemotable.

A collision follower lags particles by one frame. Two fixes?

Tick prerequisite so it runs after the Niagara component. Better: make one authority (your code) compute positions, move collision in PrePhysics and feed the same positions to Niagara.

Why isn't a 0.001s looping timer smoother than Tick?

Timers are processed once per frame. A sub-frame interval just fires several times in the same frame to catch up.

Tell the corrected Tick story in one sentence.

"The problem was never Tick, it was unnecessary per-frame work. Per-frame work belongs in Tick, at the right point in the frame, and only while needed."