Event Blueprint Update Animation¶
At a glance
Lives on: the Anim Instance (your Animation Blueprint EventGraph) ·
Outputs: execution plus Delta Time X in seconds ·
Runs: during the animation update for a ticking SkeletalMeshComponent -
usually every frame, but not a general-purpose Actor Tick ·
Fails by: not firing when the Anim Instance is not updating; no None
return and no error handler ·
Official docs: Animation Blueprint Event Nodes
and UAnimInstance
The one-minute version¶
- This is the Animation Blueprint's normal per-update data gathering event. Use it to set the variables your AnimGraph and state machine read.
Delta Time Xis the time, in seconds, since this Anim Instance's previous update. Use it for interpolation and time-based changes.- It is not a try/catch, not a state-machine transition, and not a magic place where expensive gameplay code becomes free.
- The EventGraph runs on the game thread. Keep the work cheap: read cached references, update floats and booleans, and leave heavy searches out of it.
- The beginner locomotion pattern is: cache your character in Initialize Animation, then on Update Animation check it with Is Valid, read velocity/falling state, and set animation variables.
What it actually does¶
An Animation Blueprint instance belongs to a SkeletalMeshComponent. When that component updates its animation, the Anim Instance gets a chance to update the Blueprint variables that the pose graph will use.
pseudocode of the engine's behavior - not engine source
when the skeletal mesh updates animation:
DeltaTimeX = time since this Anim Instance last updated
run Event Blueprint Update Animation on the game thread
AnimGraph/state machine reads the updated variables
animation pose is updated/evaluated
That is why the node sits at the top of so many beginner Animation Blueprint EventGraphs. It is the handoff from gameplay data to animation state:
- "How fast is my character moving?"
- "Is my character falling?"
- "Is the weapon equipped?"
- "Should the state machine choose idle, walk, run, jump, or land?"
It does not animate bones directly. It updates values that the AnimGraph, BlendSpaces, transition rules, and state machine use to choose and blend poses.
When it does not run (and what failure does)¶
There is no failure pin because this event does not return a value. If the Anim Instance is not updating, the event simply does not fire.
Common causes:
- No Animation Blueprint is assigned. The SkeletalMeshComponent is using a different animation mode or a different Anim Class.
- The mesh is not ticking animation. The component may be inactive, hidden/cull-optimized, paused, or otherwise configured not to update in the way you expect.
- You are looking at editor preview behavior. The preview viewport can run
animation logic without your real GameMode, PlayerController, or possessed
pawn. Owner lookups can be
Nonethere even though the event itself fires. - The graph has the wrong event. Initialize Animation is one-time setup; Update Animation is the repeating update.
- Update is disabled by code or setup. Native code and linked animation setups can change whether an Anim Instance updates.
When it does not run, Unreal does not call your connected Blueprint nodes, does not log a special error for this event, and does not run the graph later to "catch up." Your animation variables keep whatever values they already had.
The pattern everyone actually uses¶
Do one-time reference work in Initialize Animation:
Try Get Pawn Owner -> Cast To X ->
store OwnerCharacter.
Then keep Update Animation focused:
Event Blueprint Update Animation ->
Is Valid (OwnerCharacter) ->
read movement values ->
set AnimBP variables such as GroundSpeed, IsFalling, IsAccelerating.
For first locomotion, the usual speed line is:
OwnerCharacter -> Get Velocity ->
Vector Length XY -> set GroundSpeed.
Use Vector Length XY for ground locomotion because it ignores vertical speed.
A full 3D vector length includes jumping and falling, which can make a ground
speed BlendSpace spike while the character is in the air.
The C++ twin, for the curious (our own example code):
void UHeroAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
if (!IsValid(OwnerCharacter))
{
return;
}
GroundSpeed = OwnerCharacter->GetVelocity().Size2D();
}
Delta Time X¶
Delta Time X is a float measured in seconds. If your Anim Instance updated
about 60 times per second, it will be around 0.016. At 30 updates per second,
it will be around 0.033.
Use it when your math depends on time:
- smoothing a value with interpolation,
- counting how long a state has been active,
- moving a value by "units per second" instead of "units per update."
Do not multiply by Delta Time X twice. If a node already expects a delta time
input, give it the value once. If you are just copying velocity into
GroundSpeed, you do not multiply velocity by delta time; velocity is already
"distance per second."
EventGraph vs thread-safe update¶
The regular EventGraph, including Event Blueprint Update Animation, runs on the game thread. That makes it safe for ordinary Blueprint object access, but it also means expensive work here competes with the rest of gameplay.
UE5 also has Blueprint Thread Safe Update Animation and Property Access for more optimized animation data gathering. Those are useful once you are trying to reduce game-thread animation work. For a first character, start with the regular Update Animation pattern until you understand the data flow, then move stable reads into thread-safe functions when performance work justifies it.
Lookalikes - which one do I want?¶
| Node or graph | Runs when | Use when |
|---|---|---|
| Event Blueprint Initialize Animation | When this Anim Instance is initialized | Cache owner references and set initial values. |
| Event Blueprint Update Animation | Each animation update while the mesh is ticking | Refresh animation variables from gameplay data. |
| Blueprint Thread Safe Update Animation | Worker-thread-friendly animation update path | You are optimizing data reads with thread-safe functions and Property Access. |
| Event Tick | Actor tick on an Actor Blueprint | General actor gameplay updates, not AnimBP state gathering. |
| Anim Notify | A point in an animation asset is reached | Trigger timing tied to a specific animation, like footsteps or montage hits. |
| Transition rule | The state machine asks whether it may change states | Decide if animation state A can transition to state B. |
Going deeper¶
- Try Get Pawn Owner - the usual first owner lookup in an Animation Blueprint.
- Cast To X and Is Valid - the guard nodes around cached Animation Blueprint references.
- Possession - why the editor preview is not your live possessed pawn.
- Get Velocity - the movement value most beginner locomotion graphs read during this event.
- Official docs: Graphing in Animation Blueprints, Animation Optimization, and Property Access.
- Engine source (requires engine access - we do not reproduce it here):
UAnimInstance::BlueprintUpdateAnimation,UAnimInstance::UpdateAnimation, andUAnimInstance::NativeUpdateAnimationinEngine/Source/Runtime/Engine/Private/Animation/AnimInstance.cpp.