📚몽타주란?
몽타주를 사용하면 블루프린트 또는 C++ 코드를 통해 애니메이션 애셋을 바로 제어할 수 있다.
또한 여러 애니메이션 시퀀스를 하나의 애셋으로 합칠 수 있고, 이를 여러가지의 섹션으로 나눠 일부를 조합하여 재생하는 것도 가능하다. 몽타주 안에서 노티파이를 호출하여 애니메이션 구간 중 특정 부분에서 이벤트를 발동시키면 사운드나 이펙트같은 게임 작업을 구현할 수 있다.
위 화면에서는 몽타주의 DefaultGroup을 UpperBody로 설정하여 해당 Attack 애니메이션을 상체에만 Blend하여 적용시켰고, 애니메이션이 끝날 즘 End Action 노티파이를 호출하여 애니메이션이 끝났는지를 체크하는 함수를 호출하였다.
📚 Blends 노드 / 본마다 레이어로 블렌딩합니다.
Blends 노드는 뼈대로 구성된 스켈레탈 메시를 원하는 뼈대(관절)들끼리 섞어서 사용하고 싶을때 적용하면 된다. 예를 들어 가만히 있는 Idle 애니메이션과, 손 흔드는 애니메이션이 각자 존재할 때, 서서 손흔드는 애니메이션을 구현하고 싶을 때 각 포즈를 베이스 포즈와 블렌드 포즈에 연결하면 된다.
이러한 원리를 이용하면 뛰면서 손흔들기, 뛰면서 손흔들면서 고개돌리기 등 다양한 애니메이션과 기능들을 구현해낼 수 있다.
블렌드 웨이트를 설정하면 각 포즈에 대한 비중을 지정할 수 있다.
📚 슬롯 이전구간 초기화 문제점
![]() |
![]() |
![]() |
Unarmed Idle 상태 | Sword Idle 상태 | Attaking 상태 |
몽타주를 사용해서 플레이어의 공격기능을 만들던 중 발견된 문제점이 있다.
내 프로그램은 Unarmed Idle 상태에서 무기를 꺼내면 공격 가능한 Sword Idle 상태로 전환이 된다. 그 후 공격키를 눌러 Attack을 수행하는데, 문제점은 Attack 후 Sword Idle 상태가 아닌 Unarmed의 Idle 상태로 돌아오는 것이었다.
애니메이션 블루프린트를 디버깅해본 결과 문제구간은 몽타주였다.
몽타주를 실행하기 위해 애니메이션 블루프린트에서 Default Slot을 추가하였고, 해당 슬롯이 맞는 구간에서 몽타주가 실행되었다. 그러나 슬롯에서 몽타주가 실행되는 순간 이전 구간을 초기화해버린다. 즉, Unarmed 스테이트머신에 설정해둔 Sword Idle 상태가 기본 상태인 Unarmed Idle 상태(Entry-Idle)로 초기화되어버리는 것이었다.
따라서 이러한 슬롯 초기화 문제를 해결하기 위해 Pose를 만들고 해당 포즈에 이전 상태를 저장하여 실행시키는 방법을 사용하였다.
Unarmed 스테이트머신을 포즈에 저장한 뒤, Unarmed 포즈를 캐시 포즈로 두개 생성하였다. 상단에 있는것은 하체 애니메이션을 출력하고, 하단에 있는것은 상체인 UnpperBody 그룹을 출력하기 위함이다.
두 포즈를 레이어로 블랜딩하여 걷거나 뛰는 하체 애니메이션과 공격하는 상체 애니메이션을 함께 재생해주었다.
단순한 공격이나 걷기,뛰기같은 기본동작만 플레이되면 두 Pose가 같은 동작을 출력하니 블랜딩한 결과도 다를것은 없다.
위와 같은 구성으로 몽타주를 배치하면 몽타주가 끝나서 몽타주 뒤에 있는 하단의 Unarmed Pose를 초기화시켜도 기준은 Unarmed 스테이트 머신에서 저장되고있는 포즈가 따로 있기 때문에 애니메이션이 초기화되지 않고 Sword Idle 상태로 잘 작동된다.
그렇다면 UnpperBody 슬롯만 필요하고, 뒤에 캐시포즈는 필요없는것 아닌가? 라고 생각할 수 있지만, 슬롯 뒤에있는 캐시 포즈 객체가 없다면 해당 슬롯은 초기화된 애니메이션이 없어 상체가 모델의 기본 포즈인 T포즈로 출력되어 캐시포즈는 꼭 필요하다.
참조
https://docs.unrealengine.com/4.27/ko/AnimatingObjects/SkeletalMeshAnimation/AnimMontage/Overview/
애니메이션 몽타주 개요
애니메이션 몽타주 애셋 작업 방식과 어디에 사용할 수 있는지에 대한 설명입니다.
docs.unrealengine.com
https://docs.unrealengine.com/4.27/ko/AnimatingObjects/SkeletalMeshAnimation/NodeReference/Blend/
Blend 노드
일정 조건에 따라 여러 애니메이션을 블렌딩하는 애니메이션 노드입니다.
docs.unrealengine.com
'🎮Unreal4 > Blueprint' 카테고리의 다른 글
[UE4] 머티리얼(Material), 머티리얼 인스턴싱 (0) | 2023.01.23 |
---|---|
[UE4] 충돌(Overlap/Hit,Block Collision), 콜리전 반응, Collision Enabled (0) | 2023.01.21 |
[UE4] 노티파이 호출 시 확인사항 (0) | 2023.01.20 |
[UE4] 벡터의 성질 실습으로 증명하기 (0) | 2023.01.20 |
[UE4] Animation Notify, Notify State (0) | 2023.01.19 |