【Unreal Engine】Animation Montage入門:攻撃モーションを再生してNotifyで当たり判定を出す

作成: 2026-07-20

State Machineでは扱いにくい「1回きりの動作」を担当するのがAnimation Montage。Slotノードの挿し忘れという定番のつまずきから、Anim Notifyで攻撃判定のタイミングを打つ方法、Sectionでコンボへ広げるところまでを図解します。

キャラクターが歩いて走って跳べるようになると、次は攻撃を入れたくなります。ところが、State Machineに Attack 状態を足すと途端に扱いにくくなります。攻撃が終わったことをどう検知するか、移動中に割り込ませるとどうなるか、コンボはどう組むか。遷移の線が増えるほど、絵として読めなくなっていきます。

UEには、こうした 1回きりの動作 を担当する別の仕組みがあります。 Animation Montage です。この記事では、State Machineとの役割分担、Montageが再生されない原因になりやすいSlotノード、そして攻撃判定のタイミングを打つAnim Notifyまでを解説します。

再生ボタンの付いた1本のバーに、途中で印が打たれているイメージ

この記事でわかること

  • 繰り返す状態はState Machine、単発の割り込みはMontage
  • Montageが映らない原因No.1は Slotノードの挿し忘れ
  • Play Montage の出力ピンで 終了・中断・通知 を受け取る
  • Anim Notify で「攻撃判定が出る瞬間」を打つ
  • 実践: 振りかぶり中は当たらず、振り下ろしの区間だけ当たる斬撃

Sponsored

State MachineとMontageの役割分担

どちらもアニメーションを再生する仕組みですが、向いている対象がはっきり分かれています。

State Machineは輪を描いて回り続ける状態、Montageは1本の線として割り込む動作であることを対比した図
State MachineAnimation Montage
担当続いている状態1回きりの動作
待機、歩行、走行、落下攻撃、被弾、回避、扉を開ける
終わり方条件が変わるまで続く再生し終わったら勝手に戻る
きっかけ変数の変化(bIsInAir など)Blueprintから明示的に再生
書く場所Anim Graph(アセット側)ゲーム側のBlueprint

判断の基準は 「終わりが自分で決まるか」 です。走行には終わりがありません。スティックを離すまで続きます。一方、剣を振る動作は1.0秒で必ず終わります。 終わりを持つ動作はMontage と考えてください。

State Machineに攻撃を足すと、「攻撃アニメが終わったかどうか」を毎フレーム調べて、遷移条件に書くことになります。Montageなら、その判定は仕組みの側が持っています。

移動アニメの土台そのものはState MachineとBlend Spaceの記事で扱っています。この記事は、そこへ攻撃を割り込ませる続きにあたります。

Montageを作る

作り方は2通りありますが、既にアニメーションアセットがあるなら1つ目が早いです。

方法1:AnimSequenceから作る。 コンテンツブラウザで攻撃のAnimation Sequenceを右クリックし、 Create > Create AnimMontage を選びます。同じ内容を持つMontageが1本できます。

方法2:空から作る。 右クリック > Animation > Animation Montage を選び、スケルトンを指定します。開いたら、下部のMontageトラックへAnimation Sequenceをドラッグして並べます。

Montageエディタを開くと、下部にトラックが縦に並んでいます。最初に押さえるのは3つです。

トラック中身
Montage実際に並んだアニメーション。複数つなげられる
Sections区間の名前。既定で Default が1つある
Notifies途中で飛ばす通知の置き場。この記事の主役

詳細パネルの Blend InBlend Out は、再生の入りと抜けの滑らかさです。既定の0.25秒前後で自然に見えますが、素早い攻撃なら0.1秒程度まで詰めると、反応が良く感じられます。

Sponsored

Slotノードを挿す

ここが、Montageで最初にして最大のつまずきです。

Montageを再生しても、Animation Blueprint側に受け皿がなければ何も起きません。 Montageは自分で画面に出るのではなく、 Anim Graphの決められた場所にポーズを差し込む 仕組みだからです。その場所が Slot です。

State MachineとOutput Poseの間にSlotノードが入っている構成と、入っていない場合にMontageの出力が捨てられる様子の対比図

Animation Blueprintを開き、Anim Graphで次のようにつなぎます。

Locomotion(State Machine)
  → Slot 'DefaultSlot'      ← 右クリックして「Slot」で検索
  → Output Pose

既定のスロット名は DefaultSlot で、Montage側も既定でここを使います。何も設定を変えていなければ、この1ノードを挿すだけでつながります。

挿さっていないときの症状は独特です。 Montageは再生されており、Play MontageOn Completed も正しく呼ばれるのに、キャラクターだけが歩き続けます。 ログを出すと動いているように見えるので、原因にたどり着きにくいのが厄介なところです。

Slotが増えたら: 「走りながら上半身だけ攻撃する」のように部位を分けたくなったら、UpperBody のようなSlotを追加し、Layered blend per bone と組み合わせます。Slotの追加と管理は Window > Anim Slot Manager から行い、Montage側の詳細パネルで使うSlotを指定します。

Play Montageで再生する

再生ノードは複数あり、名前が似ているので混同しやすい部分です。

ノードTarget特徴
Play MontageSkeletal Mesh Component終了・中断・通知を 出力ピンで受け取れる 。Blueprint向き
Play Anim MontageCharacter手軽。戻り値は再生時間(秒)だけ
Montage PlayAnim Instance低レベル。戻り値は再生時間だけ

Blueprintで組むなら Play Montage を選んでください。 「攻撃が終わったら次の処理へ」を、追加の判定なしに書けます。

Play Montageノードの5つの出力ピンと、それぞれが出るタイミングを示した図

出力ピンは5つあります。

ピン出るタイミング使いどころ
On Completed最後まで再生し終わったとき攻撃状態の解除、次の入力を受け付ける
On Blend Out抜けのブレンドが始まったときOn Completed より少し早い後処理
On Interrupted別のMontageに割り込まれたときコンボの途中打ち切り、被弾で中断
On Notify BeginMontage Notifyが来たとき当たり判定ON、エフェクト、効果音
On Notify EndMontage Notify Windowが終わるとき当たり判定OFF

On Notify BeginOn Notify End には Notify Name の出力があります。通知を複数打つ場合は、この名前を Switch on Name で振り分けます。

重要な制限: On Notify Begin / On Notify End が反応するのは Montage NotifyMontage Notify Window だけです。通常のAnim Notifyを打っても、このピンは沈黙します。理由は次の節で扱います。

Sponsored

Anim Notifyでタイミングを打つ

Anim Notify は、アニメーションの特定のフレームに置く印です。再生がその位置を通過した瞬間に、イベントが飛びます。

Montageのタイムライン上に瞬間の通知と区間の通知が置かれ、振りかぶり・振り下ろし・戻りの区間が示されたタイムライン図

「攻撃の何フレーム目から当たり判定を出すか」は、この印で決めます。Notifiesトラックの置きたい位置で右クリックし、Add Notify から種類を選びます。

種類は大きく2系統あります。

種類受け取り方
Montage Notify瞬間(点)Play MontageOn Notify Begin
Montage Notify Window区間(幅を持つ)On Notify BeginOn Notify End
New Notify(通常)瞬間(点)Animation Blueprintの AnimNotify_名前 イベント
Anim Notify State(自作)区間自作クラスの Notify Begin / Notify Tick / Notify End

上2つは Montage専用 で、再生元のBlueprintへ直接返ってきます。攻撃判定のように Montageを再生した本人が受け取りたい ものは、こちらが手軽です。

下2つはアニメーション自体に紐づく通知です。足音やエフェクトのように 誰が再生しても同じことが起きてほしい ものに向いています。この場合はAnimation BlueprintのEvent Graphで右クリックし、AnimNotify_Footstep のような名前のイベントを追加して受けます(イベント名は AnimNotify_ に通知名をつなげた形で自動的に用意されます)。

区間で扱うか、点2つで扱うか。 当たり判定は「ONにしてOFFにする」なので、どちらでも書けます。Montage Notify Window を1つ置くほうが、開始と終了がずれる心配がなく確実です。一方、点を2つ置く形は、判定のONとOFFのタイミングを後から個別に動かしやすいという利点があります。

自作の Anim Notify State を作る場合は、コンテンツブラウザで右クリック > Blueprint Class から親クラスに AnimNotifyState を選び、Received Notify BeginReceived Notify End をオーバーライドします。「どのアニメーションでも、置くだけで無敵時間が付く」といった再利用は、この形にすると効きます。

Sectionでコンボへつなげる

Section は、Montageを区間に区切って名前を付ける機能です。1本のMontageに3連撃を並べ、Attack1 Attack2 Attack3 と名付けておくイメージです。

1本のMontageがAttack1、Attack2、Attack3の3区間に区切られ、入力があった場合だけ次へ進む分岐図

Sectionsトラックで右クリックして追加し、詳細パネルの Section順序 で、どの区間の次にどこへ進むかを設定します。ここを未設定(None)にしておくと、その区間が終わった時点でMontageが終了します。

コンボの基本形はこうです。

  1. Section順序を全て None にして、 区間ごとに止まる ようにする
  2. Attack1 を再生する
  3. 受付時間内にもう一度攻撃が押されたら、Montage Set Next Section(Anim Instance)で Attack1 の次を Attack2 に指定する
  4. 押されなければ、Attack1 が終わってMontageも終わる

Montage Jump to Sectionその場で即座に飛ぶ ノードなので、コンボには向きません。区切りの良いところまで再生してから移りたいので、Montage Set Next Section を使います。

「受付時間内かどうか」は、Notifyで作ります。ComboWindowStartComboWindowEnd を打ち、その間だけ入力を受け付ける変数を立てておく形です。この記事の実践で作る当たり判定と、まったく同じ構造になります。

Sponsored

実践:振り下ろしの区間だけ当たる斬撃

ベルトスクロールアクションの殴り、見下ろし型ARPGの剣、2Dアクションの近接攻撃。 「振りかぶり中は当たらず、振り下ろしの瞬間だけ当たる」 は、ジャンルを問わず攻撃の手触りを決める部分です。ここでは、その最小構成を組みます。

完成形

攻撃ボタンを押すと剣を振ります。振りかぶっている間に敵へ触れてもダメージは入らず、振り下ろしの区間に入った瞬間だけ当たります。同じ振りで同じ敵に2回ダメージが入ることもありません。

振りかぶり区間では敵に触れても反応せず、振り下ろし区間でだけダメージが入る様子を時間軸で示した図

再現条件

Third Person テンプレート で新規プロジェクトを作り、次を用意します。攻撃アニメーションは、マーケットプレイスの無料アセットやMixamoのものを取り込んでください。

種類名前設定
Animation MontageAM_Attack攻撃アニメーションから作成。全長 約1.0秒
AM_Attack のNotifyHitStartMontage Notify位置 0.20秒 (振り下ろしが始まる瞬間)
AM_Attack のNotifyHitEndMontage Notify位置 0.45秒 (振り切った瞬間)
Animation BlueprintABP_PlayerAnim Graphに Slot 'DefaultSlot' を挿してある
Input ActionIA_AttackDigital (Bool)。IMC_Default左マウスボタン に割り当て
BP_ThirdPersonCharacter のコンポーネントWeaponCollisionBox Collision剣の位置に配置。Collision PresetsOverlapAllDynamicCollision EnabledNo Collision
BP_ThirdPersonCharacter の変数HitActors(Actor の 配列初期値
BP_ThirdPersonCharacter の変数bIsAttacking(Boolean)初期値 false

WeaponCollision は、剣を持たせているならソケットへアタッチします。持っていない場合は、キャラクターの前方80cmあたりに置けば動作確認には十分です。

Collision Enabled最初から No Collision にしておくのが要点です。 既定のままだと、立っているだけで敵に当たり続けます。

チャンネルを分けて厳密に扱いたい場合はコリジョンチャンネルの記事を参照してください。ここでは既存プリセットのまま進めます。

ステップ1:攻撃を再生する

BP_ThirdPersonCharacter のイベントグラフに組みます。

IA_AttackからBranchで多重入力を弾き、Play Montageへつなぎ、On Notify BeginをSwitch on Nameで振り分けるノードグラフ
Enhanced Input Action IA_Attack
  Started
    → Branch(Condition: bIsAttacking)
        True  → (何もしない。連打を無視する)
        False
          → Set bIsAttacking(true)
          → Clear(Target: HitActors)        ← 前回の記録を消す
          → Play Montage
               In Skeletal Mesh Component : Mesh
               Montage to Play             : AM_Attack

bIsAttacking で弾いておかないと、連打のたびにMontageが最初から再生され、HitEnd が来る前に次の HitStart が入って判定が出っぱなしになります。

ステップ2:Notifyを受けて判定を切り替える

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)

On Interrupted でも判定を切ることが大事です。 被弾などで攻撃が中断されると HitEnd は来ません。 ここを書き忘れると、以降ずっと当たり判定が出たままになります。

ステップ3:当たったときの処理

WeaponCollision を選び、詳細パネルから On Component Begin Overlap を追加します。

On Component Begin Overlap(WeaponCollision)
  Other Actor
    → Branch(Condition: Other Actor == Self を Not)   ← 自分を除外
    → Contains(Array: HitActors, Item: Other Actor)
    → Branch(Condition: Contains の結果を Not)
        True
          → Add(Array: HitActors, Item: Other Actor)
          → Apply Damage(Damaged Actor: Other Actor, Base Damage: 20.0)

HitActors に記録してから確認する形にすると、 同じ振りで同じ敵に2回入ることがなくなります 。オーバーラップは、判定が有効な間に相手が動くたび発生しうるためです。ダメージを受けた側の処理はHPとダメージの記事にまとめています。

確認する

敵役として、Apply Damage を受けて Print String を出すだけのActorを1体置いてPlayしてください。

敵に密着して攻撃ボタンを押し、振りかぶっている間は何も出ず、剣が振り下ろされた瞬間に1回だけログが出れば成功です。 1回の攻撃でログが1行だけ、というのが答え合わせになります。

次に、AM_AttackHitStart0.20秒から0.00秒へ動かして ください。今度は振りかぶった瞬間から当たります。 Notifyの位置が、そのまま攻撃の手触りになる ことが体感できます。

うまくいかないときの切り分けです。

  • 剣を振るモーションが出ない → Anim Graphに Slot 'DefaultSlot' が挿さっていない
  • モーションは出るがログが出ないWeaponCollision の位置が敵に届いていない、または Generate Overlap Events がオフ
  • On Notify Begin が呼ばれない → Notifyの種類が Montage Notify ではなく通常のNotifyになっている
  • 1回の攻撃でログが何行も出るHitActors の確認が抜けている
  • 攻撃していないのに当たるCollision Enabled の初期値が No Collision になっていない
  • 一度攻撃すると当たりっぱなしHitEnd が打たれていないか、On Interrupted の処理が抜けている
  • 連打すると判定が残るbIsAttacking による多重再生の防止が入っていない

ポイントは2つです。

  • 判定の出し入れは、アニメーション側が持つ: 「0.2秒後に判定を出す」とタイマーで書くと、アニメーションを差し替えた瞬間にずれます。Notifyならアセット側に印が残るので、モーションを変えても位置を動かすだけで済みます
  • 切るほうの経路を先に用意する: On Interrupted と、開始時の Clear です。攻撃の不具合は「出ない」より「消えない」で起きます。ONを書いたら、その場でOFFの経路を全て埋めてください

3連撃へ広げるなら、この構造のまま Montage Set Next Section を足します。ヒット時の手触りをさらに詰めるなら、Notifyの位置に効果音とカメラの揺れを足すところからが分かりやすいです(ヒットストップ・画面シェイク・ノックバックのまとめは 「当たった感じ」を作る記事 にあります)。

Sponsored

おまけ:先に知っておくと良いこと

  • Root Motionを使うかどうかは先に決める: 踏み込みながら斬る動作は、アニメーション側に移動量を持たせる(Root Motion)ほうが自然です。使うにはAnimation Sequenceの Enable Root Motion をオンにし、Animation Blueprintの Root Motion ModeRoot Motion from Montages Only にします。使わない場合は、Character Movementの記事の要領でBlueprint側から移動させます
  • Montageの再生中に移動を止めたいなら: 攻撃中に歩けてしまうのが気になるときは、bIsAttacking を移動処理の手前に置いて弾くか、Set Movement Mode で一時的に止めます。State Machineに攻撃状態を作る必要はありません
  • Notifyの位置はスローで確認する: Montageエディタのタイムラインをドラッグして、判定を出したいフレームを目で探してください。再生速度を落として見ると、振り下ろしの開始位置が正確に取れます
  • AnimNotify_のイベントはAnimation Blueprint側に出る: 通常のNotifyをキャラクターBlueprintで受けようとしても出てきません。Animation Blueprint側で受けて、そこからキャラクターへ渡す形になります。受け取り先を1箇所にまとめたいなら、Event Dispatcherの記事の方法が使えます
  • 同じSlotのMontageは同時に鳴らない: 攻撃中に被弾のMontageを再生すると、攻撃側は On Interrupted で止まります。これは仕様どおりの挙動で、上書きされたくない場合はSlotを分けます
  • 動いているか分からないときはログを1つ: On Notify BeginPrint String を挿し、Notify Name を繋いでください。名前が流れていればMontage側は正常で、問題はコリジョン側です(→ Print Stringで値を確認する

まとめ

Montageは、State Machineが苦手な部分をちょうど埋める道具です。

やりたいこと使うもの
続く動作を切り替えるState Machine
単発の動作を割り込ませるAnimation Montage
Montageを画面に出すAnim Graphの Slot 'DefaultSlot'
終了・中断を受け取るPlay Montage の出力ピン
途中のタイミングを取るAnim Notify
区間を区切ってコンボにするMontage Section

そして、つまずいたときに真っ先に見る場所は決まっています。 映らないならSlot、タイミングが取れないならNotifyの種類 です。この2つで、Montageの不具合のほとんどは説明がつきます。

あなたの攻撃モーションは、何秒目から当たるのが気持ちいいでしょうか。まずはNotifyを1つ打って、動かしながら探してみてください。