Ticking order execution dependencygraph
Actor Components do not necessarily tick before/after owning Actor
Components that are attached tick after their parents
Actors/components tick after the matinee actor/levelsequencer that controls it (you can configure level sequencer to not do this)
Some common dependencies in order of priority: sub-bullet points mean they get run after their header
PossessingController.ActorTick
-
PossessedPawn.ActorTick
-
PossessedPawn.MovementComponent (look below for this ones other dependencies)
{PossessingController.ActorTick, MovementBasePrimitiveComponent.Primary, Owner of MovementBasePrimitiveComponent, & all of its the ticking child components}
-
MovementComponent.Primary
-
PostPhysicsTickFunction
-
OwnerActor.PrimaryActorTick
-
ACharacter::Mesh.Primary
-
MovementComponent.UpdatedComponent (e.g. Capsule component of ACharacter)
World->EndPhysicsTickFunction
- SkeletalMeshComponent.EndPhysicsTickFunction
MasterPoseComponentTick.Primary
- SkinnedMeshComponent.PrimaryComponent
{PrimitiveComponent.Primary && World->EndPhysicsTickFunction}
- PostPhysicsComponentTick
Engine Flow
FWorldDelegates::OnWorldTickStart.Broadcast(TickType, DeltaSeconds);
//Happens before net code/update all incoming packets
FEngineLoop::TotalTickTime
World::Tick()
[TG_PrePhysics, TG_PostPhysics]
ProcessLatentActions
FTickableObjects::Tick
[TG_PostUpdateWork, TG_LastDemotable]
FXSystem
FTickableObjects::Tick() ones that don't belong to world