애님 몽타주와 노티파이의 기초
공격 몽타주를 구성하고 노티파이로 타격 시점의 게임 로직을 호출해 일회성 전투 애니메이션을 완성합니다.
앞선 절들에서 우리는 캐릭터의 연속적인 움직임(Idle, Walk, Run)을 스테이트 머신과 블렌드 스페이스를 통해 자연스럽게 처리하는 방법을 배웠습니다.
하지만 게임에는 단순히 반복되거나 부드럽게 블렌딩되는 움직임 외에, 특정 시점에 한 번 재생되고 끝나는 '일회성' 동작들이 많습니다.
예를 들어, 공격, 스킬 사용, 피격, 구르기, 특정 상호작용 등의 애니메이션들이 여기에 해당합니다.
이러한 일회성 애니메이션을 효과적으로 관리하고, 애니메이션 재생 중 특정 시점에 게임플레이 로직을 트리거하는 강력한 기능이 바로 애님 몽타주(Anim Montage)와 애님 노티파이(Anim Notify)입니다.
이번 절에서는 애님 몽타주와 애님 노티파이의 기본 개념과 활용법에 대해 자세히 알아보겠습니다.
애님 몽타주(Anim Montage)란 무엇인가?
애님 몽타주(Anim Montage)는 여러 개의 애니메이션 시퀀스를 시간축에 배치하여 하나의 복합적인 애니메이션을 만드는 에셋(Asset)입니다.
특정 행동에 필요한 애니메이션들을 조합하고, 재생 순서나 블렌딩을 제어하며, 심지어 애니메이션 도중에 다른 애니메이션(예: 블렌드 스페이스를 통한 이동)과 겹치게(Layered Blending) 만들 수도 있습니다.
애님 몽타주가 필요한 이유- 일회성/특수 동작 관리: 공격, 스킬, 피격, 사망과 같이 한 번 재생되고 끝나는 중요한 애니메이션들을 효과적으로 관리할 수 있습니다.
- 복합 애니메이션 구성: 여러 시퀀스를 섞어서 하나의 복잡한 동작을 만들 수 있습니다. (예: 공격 준비 → 공격 → 공격 후 딜레이)
- 상체/하체 분리 (Layered Blending): 캐릭터의 특정 부위(예: 상체)만 몽타주 애니메이션을 재생하고, 나머지 부위(예: 하체)는 기존 애님 그래프의 애니메이션(걷기/달리기)을 유지하도록 설정할 수 있습니다.
- 게임플레이 로직과의 연동: 애니메이션 재생 중 특정 시점에 게임플레이 로직을 트리거할 수 있습니다. (애님 노티파이와 함께 사용)
애님 몽타주 생성 및 설정
캐릭터의 공격 애니메이션을 재생하는 몽타주를 만들어봅시다.
필요한 애니메이션 에셋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이 사용되지만, 특정 부위 애니메이션을 위해 새로운 슬롯을 만들 수 있습니다. - Anim Slot Manager에서
UpperBody같은 슬롯을 만들고 필요한 그룹에 속하게 할 수 있습니다. 슬롯과 그룹은 별도 이름이며, 이름만으로 적용 뼈대가 제한되지는 않습니다. 이번 기본 실습은DefaultGroup.DefaultSlot을 그대로 사용합니다. - 애님 그래프에서
Layered Blend Per Bone노드와 함께 사용하여 특정 슬롯에 재생되는 몽타주가 캐릭터의 특정 뼈대(Bone)에만 영향을 미치도록 할 수 있습니다. (예:UpperBody슬롯은 허리 위로만 영향)
저장 버튼을 클릭하여 몽타주를 저장합니다.
애님 노티파이(Anim Notify)란 무엇인가?
애님 노티파이(Anim Notify)는 애니메이션 시퀀스 또는 애님 몽타주 내의 타임라인의 지정 지점을 재생이 통과할 때 이벤트를 발생시키는 기능입니다.
이 이벤트는 애님 블루프린트의 이벤트 그래프나 다른 블루프린트에서 수신하여 게임플레이 로직을 트리거하는 데 사용됩니다.
애님 노티파이가 필요한 이유- 정확한 타이밍 동기화: 애니메이션의 특정 동작과 게임플레이 이벤트(사운드 재생, 데미지 적용, 이펙트 발생 등)를 정확하게 동기화할 수 있습니다.
- 디자이너/애니메이터 협업: 애니메이터가 애니메이션 툴 내에서 직접 특정 이벤트 발생 시점을 지정할 수 있어, 개발자와의 협업 효율성을 높입니다.
애님 노티파이 추가 및 사용
공격 애니메이션 도중 특정 시점에 데미지를 적용하는 노티파이를 추가해봅시다.
애님 몽타주 에디터 열기: AM_PlayerAttack 몽타주 에디터를 엽니다.
- 타임라인 아래
Notifies섹션에서+ Track버튼을 클릭하여Notify Track을 추가합니다.
- 노티파이를 추가하고 싶은 프레임(예: 공격 애니메이션에서 무기가 실제로 적을 타격하는 지점)으로 타임라인 헤드를 옮깁니다.
- 노티파이 트랙을 마우스 오른쪽 버튼으로 클릭하고
Notify>Add Notify...>New Notify를 선택합니다. - 이름을
AttackHit으로 지정합니다.
저장 버튼을 클릭합니다.
애님 블루프린트에서 사용해보기
몽타주의 포즈와 이벤트 경로
실선은 재생·포즈 경로, 점선은 Notify 이벤트 경로입니다. 완료·중단 정리는 캐릭터의 별도 콜백에서 처리합니다.
이제 애님 블루프린트에서 AM_PlayerAttack 몽타주를 재생하고 AttackHit 노티파이를 수신하여 게임플레이 로직을 실행해봅시다.
ABP_Mannequin) 열기- 애님 그래프 탭으로 이동합니다.
Default State Machine노드의Output Pose와Final Animation Pose사이에Slot 'DefaultSlot'노드를 추가합니다. (또는Layered Blend Per Bone노드를 사용하여 특정 슬롯만 블렌딩하도록 설정)- 이
Slot 'DefaultSlot'노드는DefaultGroup.DefaultSlot이라는 슬롯에 재생되는 모든 몽타주를 받아들여 블렌딩합니다.
- 애님 블루프린트의 업데이트 이벤트에서
IsAttacking이 참인 동안 매번 재생을 요청하지 않습니다. 그 방식은 몽타주를 반복 시작할 수 있습니다. - 아래 캐릭터 입력 이벤트에서
Play Montage를 한 번 호출하고 완료·중단 콜백으로 상태를 정리합니다.
- 애님 블루프린트의 이벤트 그래프 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다. Skeleton Notify는 블렌드 가중치·LOD·재생 중단 등에 따라 처리 조건이 달라질 수 있으므로 반드시 한 번 실행되는 권한 있는 피해 이벤트로 가정하지 않습니다.
- 여러분이 추가한 노티파이 이름(예:
AttackHit)을 검색하여Event Anim Notify_AttackHit노드를 추가합니다. - 이제 이 이벤트 노드 뒤에 공격이 실제로 적에게 데미지를 주는 로직을 구현합니다. (예:
Print String으로 공격 히트 발생!,Apply Damage노드 호출 등) - 컴파일 및 저장합니다.
BP_PlayerCharacter블루프린트를 엽니다.Event Left Mouse Button(공격 버튼) 입력 노드를 가져옵니다.- 입력이 들어왔을 때
IsAttacking이 false인지 확인하고 true로 바꿉니다. - 캐릭터 이벤트 그래프에
Play Montage를 놓고In Skeletal Mesh Component에Mesh,Montage to Play에AM_PlayerAttack을 연결합니다. - 일반 실행 출력은 재생 완료를 기다리지 않습니다.
On Completed와On Interrupted(재생 실패 포함)에IsAttacking = false와 공격 판정 정리를 각각 연결합니다. - 이 노드는 Montage Instance를 반환하는 함수가 아닙니다. Anim Instance 대상의
Montage Play와 구분합니다. - 앞에서 만든 Skeleton Notify
AttackHit는 AnimBP 이벤트에서 받습니다.Play Montage의On Notify Begin/End는 별도의 Montage Notify/Notify Window를 사용하는 경로입니다.
전투 애니메이션 테스트
게임을 플레이하고 공격 버튼을 눌러보세요.
- 캐릭터가 공격 애니메이션을 재생하고,
- 애니메이션 도중
AttackHit노티파이가 있는 지점에서 공격 히트 발생! 메시지가 출력되거나 데미지가 적용되는 것을 확인할 수 있습니다. - 공격 애니메이션이 끝난 후 다시
Idle또는Walk/Run상태로 자연스럽게 돌아가는지 확인합니다.
몽타주가 재생되지 않거나 노티파이가 실행되지 않을 때는 입력, 슬롯, 타임라인, 이벤트 수신을 따로 확인해야 합니다.
정상 완료뿐 아니라 중단·재생 실패에서도 공격 플래그와 히트박스를 정리해야 합니다. 네트워크 게임의 피해 권한·중복 판정은 별도로 설계하며 Notify 자체가 이를 보장하지 않습니다.