나만의 작은 도서관
[TIL][C++] 251015 MMO 서버 개발 115일차: [언리얼] Delay와 Retriggerable Delay의 차이, 몽타주(Montage) 본문
Today I Learn
[TIL][C++] 251015 MMO 서버 개발 115일차: [언리얼] Delay와 Retriggerable Delay의 차이, 몽타주(Montage)
pledge24 2025. 10. 15. 23:22주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
[언리얼] Delay와 Retriggerable Delay의 차이
- Delay: 지정된 시간 뒤에 다음 노드로 이동
- 반드시 그 시간 뒤에 다음 노드로 이동한다.
- Retriggable Delay: 지정된 시간 뒤에 다음 노드로 이동. 단, 지정 시간 중에 다시 트리거되면 시간이 리셋된다.
Tip. 여러 애니메이션 동시에 속성 변경하기

- 속성을 변경할 애니메이션을 선택 → 오른쪽 마우스 클릭 → Common 카테고리에서 Asset Actions → Edit Selection in Property Matrix 선택

- 이런 화면이 뜨는데, 여기서 EnableRootMotion 옵션을 체크해제 할 수 있음(애니메이션에 의한 이동 비활성화)
Tip2. 플레이시 F8을 누르면 Free Cam방식으로 전환됨
- 있지 않을까? 생각만하고 찾아보지는 않았는데, 이번 기회에 알게되었다. 정말로 좋은 단축키!
[언리얼] 몽타주(Montage)

- 몽타주로 만들 애니메이션 선택 → 마우스 오른쪽 클릭 → Animation Sequence Actions 카테고리에서 Create → Create AnimMontage클릭
몽타주란?
- 언리얼의 몽타주(Montage)는 애니메이션 블루프린트(ABP)에서 특정 애니메이션 시쿼스를 제어하고, 부분적으로 재생하거나 중단 또는 블렌딩할 수 있게 만든 “확장된 애니메이션” 리소스이다.
- AnimMontage는 하나 이상의 애니메이션 시퀀스를 “세그먼트(Segment)” 단위로 담고, 구간별로 이벤트(노티파이)나 분기점을 지정할 수 있는 에셋(← 이게 핵심)
- UAnimInstance::Montage_Play()로 재생한다.
몽타주의 목적
- 상태 머신(State Machine)흐름과 별도로 “특정 상황에서 강제적으로 애니메이션을 재생”하기 위함.
- 예를 들어, 공격, 회피, 피격, 감정 표현 등 비전형적인 단발성 애니메이션을 재생할 때 사용됨.
몽타주의 특징
- 몽타주를 사용하려면 반드시 슬롯이 존재해야한다.
- 몽타주는 AnimGraph에 존재하는 슬롯을 지정하며, 지정된 슬롯을 기준으로 그 슬롯 노드에 연결되어 “재생될 애니메이션을 덮어쓴다”.
- 덮어쓰여지는 방식은 세밀하게 제어가 가능하므로, 블렌드 인/아웃, 재생 속도 변경, 반복 재생(루프) 등이 가능하다.
- 분기나 노티파이 이벤트를 활용해 특정 시점에 C++ 또는 BP 코드를 실행할 수 있다.
상태 머신(State Machine)과의 관계?
- 상태 머신은 “상태 기반(Idle, Walk, Run 등)으로 지속적인 애니메이션 제어를 담당하는 반면, Montage는 그 위에 “일시적으로 끼어드는 동작”을 담당한다.
- 따라서, 몽타주가 재생 중인 경우에는 Slot에 연결된 상태 머신의 출력이 무시되지만, 종료되면 다시 상태 머신의 애니메이션이 출력된다.
몽타주에 Notify 이벤트 심어넣기

- 몽타주를 클릭해서 열면 위와 같은 그림이 나옴.
- 원하는 프레임 위치로 이동한 다음, 오른쪽 마우스 클릭 → Add Notify…를 선택하여 노티파이를 추가한다.
- 여기서 추가한 노티파이는 나중에 이벤트 발동으로 연결된다. → 이벤트 감지 시 무엇을 할 건지는 Play_Montage에서 결과 핀으로 설정한다.
- 위에서는 노티파이의 이름을 “MontageNotify”로 바꿨는데, 사실 Play_Montage 노드나 함수에서 이 이름을 반드시 사용해야하는건 아니다. 단지 출력핀으로 그 이름을 확인할 수 있다? 정도로 생각하면 된다. 몽타주를 플레이하면 설정한 노티파이는 다 터지는거 같다.
