[UE5] Animation Montage Basics: Playing Attack Motions and Timing Hitboxes with Notifies

Created: 2026-07-20

Animation Montage handles the one-shot actions that State Machines struggle with. This article covers the classic stumble of forgetting the Slot node, how to time attack hitboxes with Anim Notify, and how to extend into combos with Sections.

Once your character can walk, run, and jump, the next thing you want is attacks. But add an Attack state to your State Machine and it gets unwieldy fast. How do you detect that the attack finished? What happens when it interrupts movement? How do you build combos? The more transition lines you add, the less the graph reads as a picture.

UE has a separate system for these one-shot actions: the Animation Montage. This article covers how it splits work with the State Machine, the Slot node that's the usual reason a Montage doesn't show up, and Anim Notify for timing your attack hitbox.

Illustration of a single playback bar with a play button and markers placed along it

What You'll Learn

  • Repeating states go in the State Machine, one-shot interruptions go in a Montage
  • The #1 reason a Montage doesn't show is forgetting the Slot node
  • Use the output pins on Play Montage to catch completion, interruption, and notifies
  • Use Anim Notify to mark "the moment the hitbox turns on"
  • Hands-on: a sword slash that misses during the windup and only connects on the downswing

Sponsored

How State Machine and Montage Split the Work

Both play animations, but what they're suited for is clearly divided.

Diagram contrasting a State Machine as a loop that keeps circling versus a Montage as a single line that interrupts
State MachineAnimation Montage
HandlesOngoing statesOne-shot actions
ExamplesIdle, walk, run, fallAttack, hit reaction, dodge, open a door
How it endsContinues until conditions changeReturns on its own once playback finishes
TriggerVariable changes (bIsInAir, etc.)Explicitly played from Blueprint
Where you write itAnim Graph (in the asset)Blueprint on the game side

The test is "does it decide its own ending?" Running has no ending. It continues until you release the stick. A sword swing, on the other hand, always finishes in 1.0 seconds. Think of it as actions with an ending belong in a Montage.

Add attacks to a State Machine and you end up checking "is the attack animation done" every frame and writing that into a transition rule. With a Montage, the system already holds that answer.

The movement animation foundation itself is covered in the State Machine and Blend Space article. This article is the follow-up about interrupting it with attacks.

Creating a Montage

There are two ways to make one, but if you already have an animation asset the first is faster.

Method 1: from an AnimSequence. Right-click your attack Animation Sequence in the Content Browser and choose Create > Create AnimMontage. You get a Montage with the same contents.

Method 2: from scratch. Right-click > Animation > Animation Montage and pick a skeleton. Once it opens, drag Animation Sequences onto the Montage track at the bottom.

Open the Montage editor and you'll see tracks stacked at the bottom. Three of them matter first.

TrackContents
MontageThe animations laid out. You can chain several
SectionsNames for regions. There's one Default by default
NotifiesWhere you place notifies fired mid-playback. The star of this article

Blend In and Blend Out in the details panel control how smoothly playback enters and exits. The default of around 0.25 seconds looks natural, but for a fast attack, tightening it to about 0.1 seconds makes it feel more responsive.

Sponsored

Inserting the Slot Node

This is the first and biggest stumble with Montages.

Playing a Montage does nothing unless the Animation Blueprint has somewhere to receive it. A Montage doesn't put itself on screen. It works by injecting a pose at a designated place in the Anim Graph. That place is the Slot.

Comparison diagram of a setup with a Slot node between the State Machine and Output Pose, versus the Montage output being discarded when it's missing

Open your Animation Blueprint and wire the Anim Graph like this.

Locomotion (State Machine)
  → Slot 'DefaultSlot'      ← right-click and search for "Slot"
  → Output Pose

The default slot name is DefaultSlot, and Montages use it by default too. If you haven't changed any settings, inserting this one node is all it takes.

The symptom when it's missing is distinctive. The Montage does play, and On Completed on Play Montage fires correctly, yet the character just keeps walking. Logs make it look like everything is working, which is what makes the cause hard to find.

When you add more Slots: if you want to split by body part, like "attack with the upper body while running," add a Slot such as UpperBody and combine it with Layered blend per bone. Add and manage Slots from Window > Anim Slot Manager, then choose which Slot to use in the Montage's details panel.

Playing It with Play Montage

There are several playback nodes with similar names, which makes them easy to confuse.

NodeTargetCharacteristics
Play MontageSkeletal Mesh ComponentDelivers completion, interruption, and notifies via output pins. Good for Blueprints
Play Anim MontageCharacterConvenient. Returns only the play length (seconds)
Montage PlayAnim InstanceLow level. Returns only the play length

If you're building in Blueprints, pick Play Montage. It lets you write "when the attack ends, do the next thing" without any extra checks.

Diagram of the five output pins on the Play Montage node and when each one fires

There are five output pins.

PinWhen it firesUse it for
On CompletedWhen playback reaches the endClearing the attacking state, accepting the next input
On Blend OutWhen the exit blend beginsCleanup slightly earlier than On Completed
On InterruptedWhen another Montage interruptsCutting a combo short, interruption from a hit
On Notify BeginWhen a Montage Notify arrivesHitbox on, effects, sound
On Notify EndWhen a Montage Notify Window endsHitbox off

On Notify Begin and On Notify End output a Notify Name. When you place multiple notifies, route on that name with Switch on Name.

Important limitation: On Notify Begin / On Notify End only respond to Montage Notify and Montage Notify Window. Place a regular Anim Notify and these pins stay silent. The next section explains why.

Sponsored

Timing Things with Anim Notify

An Anim Notify is a marker you place on a specific frame of an animation. The instant playback passes that point, an event fires.

Timeline diagram of a Montage with an instant notify and a window notify placed on it, marking the windup, downswing, and recovery regions

"From which frame of the attack does the hitbox turn on" is decided by this marker. Right-click on the Notifies track where you want it and pick a type from Add Notify.

There are two broad families.

TypeShapeHow you receive it
Montage NotifyInstant (a point)On Notify Begin on Play Montage
Montage Notify WindowRegion (has width)On Notify Begin and On Notify End
New Notify (regular)Instant (a point)The AnimNotify_Name event in the Animation Blueprint
Anim Notify State (custom)RegionNotify Begin / Notify Tick / Notify End on your custom class

The top two are Montage-only and come back directly to the Blueprint that played it. For things like hitboxes, where the one who played the Montage wants to receive it, these are the easy choice.

The bottom two are notifies bound to the animation itself. They suit things like footsteps and effects, where the same thing should happen no matter who plays it. In that case, right-click in the Animation Blueprint's Event Graph and add an event named something like AnimNotify_Footstep (the event name is generated automatically as AnimNotify_ plus the notify's name).

Region, or two points? A hitbox is "turn on, then turn off," so either works. Placing a single Montage Notify Window is more reliable since the start and end can't drift apart. Placing two points, on the other hand, makes it easier to move the on and off timings independently later.

To build a custom Anim Notify State, right-click in the Content Browser > Blueprint Class, pick AnimNotifyState as the parent, and override Received Notify Begin and Received Notify End. Reuse like "drop this on any animation and it grants invincibility frames" works well in this form.

Extending into Combos with Sections

A Section divides a Montage into named regions. Picture lining up a three-hit combo in one Montage and naming them Attack1, Attack2, and Attack3.

Branching diagram of one Montage split into three regions, Attack1, Attack2, and Attack3, advancing to the next only when input arrives

Right-click on the Sections track to add one, then use the section order in the details panel to set which region follows which. Leave it unset (None) and the Montage ends when that region finishes.

The basic combo shape is this.

  1. Set every section order to None so it stops at each region
  2. Play Attack1
  3. If attack is pressed again within the input window, use Montage Set Next Section (Anim Instance) to set Attack1's next section to Attack2
  4. If it isn't pressed, Attack1 finishes and the Montage ends

Montage Jump to Section jumps immediately on the spot, so it isn't suited for combos. You want to finish playing to a clean break before moving on, so use Montage Set Next Section.

"Are we within the input window" is built with Notifies. Place ComboWindowStart and ComboWindowEnd and raise a variable that accepts input only in between. It's exactly the same structure as the hitbox we build in this article's hands-on section.

Sponsored

Hands-On: A Slash That Only Hits on the Downswing

Punches in a beat-'em-up, a sword in a top-down ARPG, melee in a 2D action game. "No hit during the windup, only during the downswing" is what decides how an attack feels, regardless of genre. Here we'll build the minimal version of it.

The Finished Result

Press the attack button and the character swings a sword. Touching an enemy during the windup deals no damage; damage only lands the instant the downswing begins. And the same swing never damages the same enemy twice.

Diagram along a timeline showing no reaction when touching an enemy during the windup, and damage landing only during the downswing region

Setup to Follow Along

Create a new project from the Third Person template and prepare the following. For the attack animation, import a free marketplace asset or something from Mixamo.

TypeNameSettings
Animation MontageAM_AttackCreated from the attack animation. Total length about 1.0 second
AM_Attack notifyHitStart (Montage Notify)Position 0.20 sec (the instant the downswing begins)
AM_Attack notifyHitEnd (Montage Notify)Position 0.45 sec (the instant the swing completes)
Animation BlueprintABP_PlayerWith Slot 'DefaultSlot' inserted in the Anim Graph
Input ActionIA_AttackDigital (Bool). Bound to the left mouse button in IMC_Default
BP_ThirdPersonCharacter componentWeaponCollision (Box Collision)Placed at the sword. Collision Presets set to OverlapAllDynamic, Collision Enabled set to No Collision
BP_ThirdPersonCharacter variableHitActors (array of Actor)Default empty
BP_ThirdPersonCharacter variablebIsAttacking (Boolean)Default false

If your character holds a sword, attach WeaponCollision to the socket. If not, placing it about 80cm in front of the character is plenty for testing.

The key is setting Collision Enabled to No Collision from the start. Leave it at the default and you'll hit enemies just by standing there.

If you want to separate channels and handle this strictly, see the collision channel article. Here we'll stick with the existing presets.

Step 1: Play the Attack

Build this in the BP_ThirdPersonCharacter event graph.

Node graph rejecting repeat input from IA_Attack with a Branch, feeding Play Montage, and routing On Notify Begin through Switch on Name
Enhanced Input Action IA_Attack
  Started
    → Branch (Condition: bIsAttacking)
        True  → (do nothing; ignore mashing)
        False
          → Set bIsAttacking (true)
          → Clear (Target: HitActors)        ← wipe the previous record
          → Play Montage
               In Skeletal Mesh Component : Mesh
               Montage to Play             : AM_Attack

Without the bIsAttacking guard, every mashed input restarts the Montage, and the next HitStart arrives before HitEnd, leaving the hitbox stuck on.

Step 2: Catch the Notifies and Toggle the Hitbox

Continue from the output pins of Play Montage.

Play Montage
  On Notify Begin (Notify Name)
    → Switch on Name (Target: Notify Name)
        HitStart → Set Collision Enabled (WeaponCollision, Query Only)
        HitEnd   → Set Collision Enabled (WeaponCollision, No Collision)

  On Completed   → Set bIsAttacking (false)
  On Interrupted → Set bIsAttacking (false)
                 → Set Collision Enabled (WeaponCollision, No Collision)

Turning the hitbox off in On Interrupted matters. If the attack is interrupted, by a hit reaction for example, HitEnd never arrives. Forget this and the hitbox stays on forever after.

Step 3: Handle the Hit

Select WeaponCollision and add On Component Begin Overlap from the details panel.

On Component Begin Overlap (WeaponCollision)
  Other Actor
    → Branch (Condition: Not of Other Actor == Self)   ← exclude yourself
    → Contains (Array: HitActors, Item: Other Actor)
    → Branch (Condition: Not of the Contains result)
        True
          → Add (Array: HitActors, Item: Other Actor)
          → Apply Damage (Damaged Actor: Other Actor, Base Damage: 20.0)

Recording into HitActors and checking it first means the same swing can't hit the same enemy twice. Overlaps can fire every time the target moves while the hitbox is enabled. The receiving side of damage is covered in the health and damage article.

Verify It

Place one Actor as a stand-in enemy that just receives Apply Damage and prints with Print String, then hit Play.

Stand right next to the enemy, press attack, and you should see nothing during the windup, then exactly one log line the instant the sword swings down. One line per attack is your answer key.

Next, move HitStart in AM_Attack from 0.20 sec to 0.00 sec. Now it connects from the moment the windup starts. You can feel that the notify's position is the attack's feel.

Here's how to narrow things down when it doesn't work.

  • No swing motion at allSlot 'DefaultSlot' isn't inserted in the Anim Graph
  • Motion plays but no logWeaponCollision doesn't reach the enemy, or Generate Overlap Events is off
  • On Notify Begin never fires → the notify is a regular Notify instead of a Montage Notify
  • Several log lines per attack → the HitActors check is missing
  • Hits land when you aren't attackingCollision Enabled wasn't set to No Collision initially
  • Hits keep landing after one attackHitEnd isn't placed, or the On Interrupted handling is missing
  • Mashing leaves the hitbox on → there's no bIsAttacking guard against re-triggering

There are two key points.

  • The animation owns turning the hitbox on and off: write "enable the hitbox 0.2 seconds later" with a timer and it drifts the instant you swap animations. With a Notify, the marker lives in the asset, so changing the motion only means moving the marker
  • Build the "off" path first: that means On Interrupted and the Clear at the start. Attack bugs come from things that won't turn off far more than things that won't turn on. The moment you write the ON, fill in every OFF path

To extend to a three-hit combo, keep this structure and add Montage Set Next Section. To tighten the hit feel further, adding a sound effect and camera shake at the notify's position is the easiest place to start (hitstop, camera shake, and knockback are collected in Making Hits Feel Good).

Sponsored

Bonus: Good to Know for Later

  • Decide up front whether you're using Root Motion: a lunging slash feels more natural if the animation carries the movement (Root Motion). To use it, turn on Enable Root Motion on the Animation Sequence and set the Animation Blueprint's Root Motion Mode to Root Motion from Montages Only. If you're not using it, drive movement from Blueprint the way the Character Movement article describes
  • If you want to stop movement while a Montage plays: when walking during an attack bothers you, put bIsAttacking in front of your movement logic to reject it, or stop it temporarily with Set Movement Mode. You don't need an attack state in the State Machine
  • Find notify positions in slow motion: drag the Montage editor's timeline and visually hunt for the frame where you want the hitbox. Slowing playback down makes it easy to pin the exact start of the downswing
  • AnimNotify_ events appear in the Animation Blueprint: trying to catch a regular Notify in the character Blueprint won't show anything. You catch it in the Animation Blueprint and pass it along to the character. If you want a single place to receive them, the approach in the Event Dispatcher article works
  • Montages on the same Slot can't play simultaneously: play a hit-reaction Montage during an attack and the attack stops with On Interrupted. That's the intended behavior. If you don't want it overridden, put them on separate Slots
  • When you can't tell whether it's running, add one log: insert a Print String on On Notify Begin and wire in Notify Name. If names are streaming past, the Montage side is fine and the problem is on the collision side (see Checking Values with Print String)

Summary

A Montage fills in exactly the part State Machines are bad at.

What you want to doWhat to use
Switch between ongoing actionsState Machine
Interrupt with a one-shot actionAnimation Montage
Get the Montage on screenSlot 'DefaultSlot' in the Anim Graph
Catch completion and interruptionOutput pins on Play Montage
Grab a mid-playback momentAnim Notify
Split into regions for combosMontage Section

And when you get stuck, you know exactly where to look first: if it doesn't show, check the Slot; if the timing won't fire, check the notify type. Those two explain nearly every Montage problem.

At what point in your attack motion does the hit feel best? Place one notify and hunt for it while it's running.