본문으로 바로가기

[Unreal Engine 5] Animation Montage

category UnrealEngine/기능 2023. 9. 21. 06:48

우리가 캐릭터의 공격 모션을 추가하고 싶을 때, Animation Montage를 사용할 수 있다.

이번 문서에서는 Animation Montage를 통해 캐릭터의 공격 모션을 추가하는 방법에 대해 설명한다.

 

Montage : 이미지 일부를 잘라내 한 화면에서 합성하는 회화 기법

애니메이션 클립을 잘라내고 합성한 후 이를 재생하는 애니메이션 기능

애니메이션 클립을 모아둔 다수의 섹션으로 구성되어 있다.

섹션끼리 연동할 수 있으며, 스크립트를 통해 원하는 섹션으로 건너뛸 수 있다.

 

에디터 상에서 우클릭 해 Animation Montage를 만든다.

Skeleton은 우리가 사용할 것을 선택한다.

 

Animation Montage를 열면, Montage 창이 나오는데

우리가 사용할 Attack Asset들을 드래그 해서 놓으면 쌓이게 된다.

 

우리가 사용할 Animation을 드래그 해서 놓고, Play를 눌러보면 연속적으로 실행됨을 볼 수 있다.

 

해당 Animaiton들은 'Section'으로 분리해서 처리할 수 있다.

위의 Montage(DefaultGroup)에서 우클릭을 하면 New Montage Section이 나오는데,

각각의 Attack 애니메이션들에 섹션을 추가해보자

 

추가하면 다음과 같이 Montage Sections에서 우리가 추가한 섹션들이 화살표로 연결되어서 보여지게 된다.

즉, ComboAttack1부터 시작하여 다음 섹션으로 이동되는 것이다.

만약 이동을 원하지 않는다면 화살표를 클릭해 Remove Link를 눌러 이동하는것을 막을 수 있다.

ComboAttack1 에서 ComboAttack4로 가려면 Next Section을 ComboAttack4로 설정해주기만 하면 된다.

 

이제 공격 입력이 들어올 때, Montage의 첫 번째 섹션이 실행되도록 하겠다.

일단 각자가 처리하는 방식대로 왼쪽 버튼이 클릭될 때, 입력이 들어오도록 처리한다.

문서에서는 Enhanced Input 으로 처리한다.

InputAction으로 Attack을 하나 만들었고, MappingContext에 연결해주었다.

(이 부분을 모르겠다면, https://openmynotepad.tistory.com/106 를 보시라)

 

이제 우리가 사용할 InputAction과 함수도 만들어졌으니, 사용할 Montage를 가져와야 한다.

헤더에서 Montage 에셋과, Montage를 플레이 시킬 함수를 하나 만들어준다.

 

Montage를 Play하려면 AnimInstance에게 요청해야 한다.

ProcessComboCommand는 Montage를 가져와 Play 시킨다.

 

이제 실제로 ComboActionMontage의 에셋을 추가해주어야 하는데 두 가지 방법이 있다.

1. Blueprint 에서 추가

2. 생성자에서 추가

 

문서에서는 Blueprint에서 추가로 하겠다.

생성자에서 추가는 다음과 같이 하면된다.

우리가 만든 캐릭터의 Blueprint로 들어가보면

우측 디테일 창에 Animation 이 있다.

이곳의 ComboActionMontage에 우리가 만든 Montage를 넣어주자.

 

그리고 Animation Blueprint로 가서, 기존의 MainStateMachine과 OutputPose에 slot을 추가해준다.

이 'slot'은 캐릭터가 애니메이션 행동을 할 때, 일회성인 애니메이션을 삽입하기 위해 필요한 공간을 만들어준다.

만약 Montage 애니메이션이 실행이 되어야 한다면, 기존의 MainStateMachine에서 결과로 나온 애니메이션을

Montage 애니메이션이 다 덮어쓴다고 생각하면 된다.

 

이제 InputAction이 들어올 때, Montage를 플레이 시키면 되겠다.

 

 

주의 - GameMode에서 DefaultPawnClass가 기존의 C++ 캐릭터 라면 안되고, 블루프린트로 변환시켜주어야 한다.

 

이러면 마우스 클릭을 할 시, 공격 애니메이션이 실행된다.

하지만 첫 섹션만 플레이 되는데, 다음 입력이 들어왔을 때 다음 섹션이 플레이 되게 하고 싶으면

AnimInstance의 Montage_JumpToSection 함수를 써서, 해당 섹션으로 넘어가면 된다.

 

 

이렇게 자신이 원하는 타이밍에 해당 섹션으로 넘어가게 수정하면 콤보 액션을 처리할 수 있다.