애님 몽타주와 노티파이의 기초
공격 몽타주를 구성하고 노티파이로 타격 시점의 게임 로직을 호출해 일회성 전투 애니메이션을 완성합니다.
앞선 절들에서 우리는 캐릭터의 연속적인 움직임(Idle, Walk, Run)을 스테이트 머신과 블렌드 스페이스를 통해 자연스럽게 처리하는 방법을 배웠습니다.
하지만 게임에는 단순히 반복되거나 부드럽게 블렌딩되는 움직임 외에, 특정 시점에 한 번 재생되고 끝나는 '일회성' 동작들이 많습니다.
예를 들어, 공격, 스킬 사용, 피격, 구르기, 특정 상호작용 등의 애니메이션들이 여기에 해당합니다.
이러한 일회성 애니메이션을 효과적으로 관리하고, 애니메이션 재생 중 특정 시점에 게임플레이 로직을 트리거하는 강력한 기능이 바로 애님 몽타주(Anim Montage)와 애님 노티파이(Anim Notify)입니다.
이번 절에서는 애님 몽타주와 애님 노티파이의 기본 개념과 활용법에 대해 자세히 알아보겠습니다.
애님 몽타주(Anim Montage)란 무엇인가?
애님 몽타주(Anim Montage)는 여러 개의 애니메이션 시퀀스를 시간축에 배치하여 하나의 복합적인 애니메이션을 만드는 에셋(Asset)입니다.
특정 행동에 필요한 애니메이션들을 조합하고, 재생 순서나 블렌딩을 제어하며, 심지어 애니메이션 도중에 다른 애니메이션(예: 블렌드 스페이스를 통한 이동)과 겹치게(Layered Blending) 만들 수도 있습니다.
애님 몽타주가 필요한 이유- 일회성/특수 동작 관리: 공격, 스킬, 피격, 사망과 같이 한 번 재생되고 끝나는 중요한 애니메이션들을 효과적으로 관리할 수 있습니다.
- 복합 애니메이션 구성: 여러 시퀀스를 섞어서 하나의 복잡한 동작을 만들 수 있습니다. (예: 공격 준비 → 공격 → 공격 후 딜레이)
- 상체/하체 분리 (Layered Blending): 캐릭터의 특정 부위(예: 상체)만 몽타주 애니메이션을 재생하고, 나머지 부위(예: 하체)는 기존 애님 그래프의 애니메이션(걷기/달리기)을 유지하도록 설정할 수 있습니다.
- 게임플레이 로직과의 연동: 애니메이션 재생 중 특정 시점에 게임플레이 로직을 트리거할 수 있습니다. (애님 노티파이와 함께 사용)
애님 몽타주 생성 및 설정
입력, Slot 재생, Notify, 대미지 판정, 종료 정리가 같은 프레임 흐름에서 맞아야 전투 반응이 선명합니다.
| 시점 | 담당 블루프린트 | 켜는 값 | 확인할 위험 |
|---|---|---|---|
| Input Attack Action | Character | 공격 가능 상태와 현재 콤보 인덱스 | 상태 충돌 피격, 점프, 회피 중 입력을 분기합니다. |
| Montage Play Slot과 Section | Anim Instance | 재생 Slot, Section 이동, 재생률 | Anim Graph의 Slot 이름과 일치해야 합니다. |
| Notify Begin 타격 전후 | Anim Notify | 무기 Trace, 히트박스, 대미지 창 | 판정 창 실제 타격 프레임과 맞춥니다. |
| Hit Resolve 판정 처리 | Weapon 또는 Character | 중복 피격 목록, 대미지 이벤트 | 한 공격에서 같은 대상이 여러 번 맞지 않게 합니다. |
| Montage End 종료 정리 | Character | 상태 플래그 해제와 콤보 입력 마감 | 잔류 플래그 히트박스와 콤보 상태를 반드시 끕니다. |
캐릭터의 공격 애니메이션을 재생하는 몽타주를 만들어봅시다.
필요한 애니메이션 에셋Attack_Swing애니메이션 시퀀스 (예:SKM_Mannequin_Attack)
콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.
애니메이션(Animation) > 애님 몽타주(Anim Montage)를 선택합니다.
몽타주를 적용할 스켈레톤(Skeleton)을 선택합니다. (여러분의 캐릭터 스켈레톤, 예: SKM_Mannequin_Skeleton)
이름을 지정합니다. (예: AM_PlayerAttack)
AM_PlayerAttack 에셋을 더블클릭하여 애님 몽타주 에디터를 엽니다.
- 에셋 브라우저(Asset Browser) 패널(일반적으로 좌측 하단)에서
Attack_Swing애니메이션 시퀀스를 찾습니다. Attack_Swing애니메이션을 몽타주 트랙(Track)으로 드래그 앤 드롭합니다.- 이제 몽타주가
Attack_Swing애니메이션으로 구성됩니다. 여러 개의 애니메이션 시퀀스를 드래그하여 순서대로 배치할 수도 있습니다.
- 몽타주 재생을 위해
슬롯(Slot)개념이 사용됩니다. 기본적으로DefaultGroup.DefaultSlot이 사용되지만, 특정 부위 애니메이션을 위해 새로운 슬롯을 만들 수 있습니다. Slots패널에서+ Slot버튼을 클릭하여UpperBody와 같은 새로운 슬롯 그룹을 추가할 수 있습니다. 이 슬롯을 선택하고 몽타주 트랙의 애니메이션을 해당 슬롯에 할당합니다.- 애님 그래프에서
Layered Blend Per Bone노드와 함께 사용하여 특정 슬롯에 재생되는 몽타주가 캐릭터의 특정 뼈대(Bone)에만 영향을 미치도록 할 수 있습니다. (예:UpperBody슬롯은 허리 위로만 영향)
저장 버튼을 클릭하여 몽타주를 저장합니다.
애님 노티파이(Anim Notify)란 무엇인가?
애님 노티파이(Anim Notify)는 애니메이션 시퀀스 또는 애님 몽타주 내의 특정 프레임에서 이벤트를 발생시키는 기능입니다.
이 이벤트는 애님 블루프린트의 이벤트 그래프나 다른 블루프린트에서 수신하여 게임플레이 로직을 트리거하는 데 사용됩니다.
애님 노티파이가 필요한 이유- 정확한 타이밍 동기화: 애니메이션의 특정 동작과 게임플레이 이벤트(사운드 재생, 데미지 적용, 이펙트 발생 등)를 정확하게 동기화할 수 있습니다.
- 디자이너/애니메이터 협업: 애니메이터가 애니메이션 툴 내에서 직접 특정 이벤트 발생 시점을 지정할 수 있어, 개발자와의 협업 효율성을 높입니다.
애님 노티파이 추가 및 사용
몽타주가 동작하려면 Montage Asset 안의 Section과 Notify뿐 아니라 Anim Graph의 Slot 노드, Event Graph의 수신 로직이 함께 맞아야 한다.
- 몽타주가 재생되어도 화면 변화가 없음
Slot 불일치 몽타주가 재생되어도 화면 변화가 없음 Montage Slot과 Anim Graph Slot 노드 이름을 맞춘다. DefaultSlot 확인
- 콤보 입력 타이밍에 다음 구간으로 이동
Section 분기 콤보 입력 타이밍에 다음 구간으로 이동 Montage Jump to Section을 입력 버퍼와 연결한다. Next Section
- 타격, 발소리, 이펙트가 실행되지 않음
Notify 누락 타격, 발소리, 이펙트가 실행되지 않음 Anim Notify 이름과 Event Graph 이벤트 이름을 맞춘다. Received Notify
- 시작과 종료가 튀어 보임
Blend 문제 시작과 종료가 튀어 보임 Blend In, Blend Out과 상체 Slot Layered Blend를 함께 조정한다. pose blend
공격 애니메이션 도중 특정 시점에 데미지를 적용하는 노티파이를 추가해봅시다.
애님 몽타주 에디터 열기: AM_PlayerAttack 몽타주 에디터를 엽니다.
- 타임라인 아래
Notifies섹션에서+ Track버튼을 클릭하여Notify Track을 추가합니다.
- 노티파이를 추가하고 싶은 프레임(예: 공격 애니메이션에서 무기가 실제로 적을 타격하는 지점)으로 타임라인 헤드를 옮깁니다.
- 노티파이 트랙을 마우스 오른쪽 버튼으로 클릭하고
Notify>Add Notify...>New Notify를 선택합니다. - 이름을
AttackHit으로 지정합니다.
저장 버튼을 클릭합니다.
애님 블루프린트에서 사용해보기
공격 입력이 애니메이션 포즈와 데미지 타이밍으로 이어지는 실제 경로를 분리해 본다.
- Input
캐릭터 또는 컨트롤러가 공격 입력을 받는다.
- Play Montage
Anim Instance가 재생 섹션과 속도를 정한다.
- Slot Blend
Anim Graph의 Slot이 기본 이동 포즈 위에 섞는다.
- Notify
타격 프레임에서 이벤트가 발화된다.
- Gameplay
데미지, 사운드, 이펙트를 실행한다.
| 기준 | 판정 |
|---|---|
| Slot 미연결 | Montage가 호출돼도 화면 포즈가 바뀌지 않는다. |
| Notify 누락 | 포즈는 보이지만 타격 판정이 실행되지 않는다. |
| Reset 누락 | 공격 후 이동 상태로 돌아가지 못한다. |
몽타주 타임라인에서 슬롯, 섹션, 노티파이가 어떤 순서로 맞물리는지도 함께 확인해봅시다.
재생 시작, 준비 동작, 타격 프레임, 회복 구간을 같은 시간축에서 확인한다.
- Start
0.00s 입력으로 Montage 재생
- Wind up
0.25s 상체 Slot에 공격 포즈 합성
- AttackHit
0.48s Notify가 데미지와 이펙트 호출
- Recover
0.86s 공격 플래그 해제와 상태 복귀
| 구간 | 확인할 일 |
|---|---|
| 입력 수신 | 캐릭터 BP가 Anim Instance에 재생을 요청한다. |
| Slot 합성 | 이동 포즈와 공격 포즈가 Upper Body에서 섞인다. |
| Notify 실행 | 무기가 닿는 프레임만 게임 로직을 연다. |
| 복귀 처리 | 끝난 뒤 Idle/WalkRun 전이 조건을 다시 만족시킨다. |
이제 애님 블루프린트에서 AM_PlayerAttack 몽타주를 재생하고 AttackHit 노티파이를 수신하여 게임플레이 로직을 실행해봅시다.
ABP_Mannequin) 열기- 애님 그래프 탭으로 이동합니다.
Default State Machine노드의Output Pose와Final Animation Pose사이에Slot 'DefaultSlot'노드를 추가합니다. (또는Layered Blend Per Bone노드를 사용하여 특정 슬롯만 블렌딩하도록 설정)- 이
Slot 'DefaultSlot'노드는DefaultGroup.DefaultSlot이라는 슬롯에 재생되는 모든 몽타주를 받아들여 블렌딩합니다.
- 이벤트 그래프 탭으로 이동합니다.
Event Blueprint Update Animation에서 캐릭터의IsAttacking불리언 변수(플레이어 캐릭터에서 공격 버튼 누를 시 설정)를 가져와Branch노드를 연결합니다.True(공격 중) 핀 뒤에Play Montage노드를 추가합니다.In Montage To Play핀에AM_PlayerAttack몽타주 에셋을 연결합니다.Return Value는Montage Instance를 반환합니다.Play Montage노드는 몽타주가 재생될 때까지 대기합니다.
- 컴파일 및 저장합니다.
- 애님 블루프린트의 이벤트 그래프 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다.
- 여러분이 추가한 노티파이 이름(예:
AttackHit)을 검색하여Event Anim Notify_AttackHit노드를 추가합니다. - 이제 이 이벤트 노드 뒤에 공격이 실제로 적에게 데미지를 주는 로직을 구현합니다. (예:
Print String으로 공격 히트 발생!,Apply Damage노드 호출 등) - 컴파일 및 저장합니다.
BP_PlayerCharacter블루프린트를 엽니다.Event Left Mouse Button(공격 버튼) 입력 노드를 가져옵니다.- 해당 이벤트 뒤에
Get Anim Instance노드를 호출합니다. (플레이어 캐릭터의Mesh컴포넌트에서) Get Anim Instance의Return Value를 여러분의 애님 블루프린트(예:Cast To ABP_Mannequin)로 캐스팅합니다.- 캐스팅된 애님 블루프린트 참조에서
Play Montage함수를 호출하고AM_PlayerAttack몽타주를 연결합니다. - (선택 사항)
IsAttacking불리언 변수를Set하여 애님 블루프린트에 공격 상태를 알립니다.
전투 애니메이션 테스트
게임을 플레이하고 공격 버튼을 눌러보세요.
- 캐릭터가 공격 애니메이션을 재생하고,
- 애니메이션 도중
AttackHit노티파이가 있는 지점에서 공격 히트 발생! 메시지가 출력되거나 데미지가 적용되는 것을 확인할 수 있습니다. - 공격 애니메이션이 끝난 후 다시
Idle또는Walk/Run상태로 자연스럽게 돌아가는지 확인합니다.
몽타주가 재생되지 않거나 노티파이가 실행되지 않을 때는 입력, 슬롯, 타임라인, 이벤트 수신을 따로 확인해야 합니다.
아래 표처럼 책임을 분리해 두면 전투 애니메이션 문제가 어느 단계에서 생겼는지 빨리 좁힐 수 있습니다.
증상을 한 번에 추측하지 말고 체인의 앞 단계부터 끊긴 지점을 찾는다.
- 1Input
공격 버튼과 캐릭터 참조가 한 번만 호출되는지 본다.
- 2Play
Montage 에셋, 섹션 이름, Anim Instance를 확인한다.
- 3Slot
Anim Graph의 Slot이 최종 포즈 앞에 연결됐는지 본다.
- 4Notify
름과 이벤트 함수명이 정확히 같은지 맞춘다.
- 5Reset
종료 후 공격 플래그와 상태 전이가 풀리는지 본다.
| 기준 | 판정 |
|---|---|
| 소리만 나고 포즈가 없음 | Slot 연결과 Slot 이름을 먼저 확인한다. |
| 포즈는 보이는데 데미지가 없음 | Notify 프레임과 이벤트 이름을 확인한다. |
| 공격 후 굳음 | Reset과 Idle/WalkRun 전이 조건을 확인한다. |
몽타주와 노티파이는 타임라인, 슬롯, 애님 블루프린트 이벤트, 캐릭터 입력이 한 줄로 이어질 때 안정적으로 동작합니다.
아래 다이어그램은 전투 애니메이션을 구현한 뒤 끊기는 지점을 찾는 순서입니다.
공격 애니메이션이 재생되어도 데미지가 들어가지 않으면 타임라인, 슬롯, 이벤트 그래프, 캐릭터 입력을 순서대로 나눠 확인합니다.
- 타임라인노티파이 위치 확인
타임라인 AttackHit가 실제 타격 프레임 근처에 놓였는지 몽타주 트랙에서 확인합니다.
- 슬롯재생 슬롯 일치
슬롯 몽타주의 슬롯 이름과 애님 그래프의 Slot 노드 이름이 같아야 포즈가 통과합니다.
- 이벤트수신 노드 연결
벤트 Anim Notify 이벤트 뒤에 Apply Damage나 판정 로직이 실제로 연결되어야 합니다.
- 401 · 입력
· 입력 공격 버튼이 호출됩니다.
- 502 · 캐스팅
· 캐스팅 Anim Instance를 얻습니다.
- 603 · 재생
· 재생 몽타주가 슬롯으로 흐릅니다.
- 704 · 판정
· 판정 노티파이가 로직을 실행합니다.
애님 몽타주는 일회성 특수 동작을 관리하고, Layered Blend Per Bone과 함께 상체/하체 분리 애니메이션을 구현할 때 사용합니다.
애님 노티파이는 애니메이션 특정 프레임과 게임플레이 로직을 동기화하는 기능입니다.
마지막으로 애님 몽타주와 노티파이를 전투 타이밍에 연결할 때의 Slot, Section, Notify 기준을 정리합니다.
공격, 피격, 스킬처럼 중간 이벤트가 필요한 애니메이션은 Montage Section과 Anim Notify 타이밍을 함께 봅니다.
- 몽타주는 애니메이션 안의 실행 계획
Anim Graph의 Slot 노드가 몽타주를 받을 준비를 하고, Notify는 데미지 판정이나 이펙트 생성 시점을 지정합니다. 01 UpperBody 같은 Slot을 Anim Graph에 연결하지 않으면 Play Anim Montage를 호출해도 최종 포즈에 반영되지 않습니다. 02 Start, Loop, End 섹션 이름을 정하고 Montage Jump to Section으로 콤보나 차지 공격을 제어합니다. 03 AttackWindowStart, SpawnTrail, Footstep 같은 Notify 이름을 이벤트로 받아 판정과 사운드를 분리합니다.
- 몽타주는 애니메이션 안의 실행 계획
Anim Graph의 Slot 노드가 몽타주를 받을 준비를 하고, Notify는 데미지 판정이나 이펙트 생성 시점을 지정합니다.
- 재생 위치
UpperBody 같은 Slot을 Anim Graph에 연결하지 않으면 Play Anim Montage를 호출해도 최종 포즈에 반영되지 않습니다.
- 구간 제어
Start, Loop, End 섹션 이름을 정하고 Montage Jump to Section으로 콤보나 차지 공격을 제어합니다.
- 노티파이 처리
AttackWindowStart, SpawnTrail, Footstep 같은 Notify 이름을 이벤트로 받아 판정과 사운드를 분리합니다.
애님 몽타주와 노티파이의 기초는 입력 이벤트, 상태 변경, 실행 위치, 디버그 기준을 함께 확인할 때 안정적으로 정리됩니다.