Post List

2017/11/29

Unreal4__5_애니메이션_몽타주

이번에는 몬스터가 무기없이 왼손 오른손 번갈아가면서 펀치를 날리는 공격모션을 만들어보았습니다언리얼 공식홈페이지에 있는 애니메이션 몽타쥬 튜토리얼을 참고하여 만들어 보았으며애니메이션도 튜토리얼에서 가져와서 적용해보았습니다.

우선 작업내용을 소개하기전에 용어에 대해서 간단히 설명하겠습니다.

먼저, 애니메이션 몽타주 애님 그래프에 연결하여 실행시간에 상태를 변경할 있는 기능입니다. 예를 들면, 다른 섹션으로 점프하거나 다른 섹션으로 다시 연결할  있답니다.
섹션이란 애니메이션을 부분으로 나눌 있는 수단으로, 슬롯의 타임라인안에 이름과 위치가 있습니다. 이름을 통해 특정 섹션으로 바로 점프하거나현재 재생중인 섹션이 완료시 다음에 재생할 섹션을 큐에 등록시킬 수도 있습니다.

여기서 슬롯 대해 간략하게 말씀드리면 하나의 트랙으로, 다수의 애니메이션을 담을 있습니다. 트랙을 부분으로 나눠주는것이 섹션입니다.

이제 작업한 내용을 가지고 설명을 해보겠습니다.



애니메이션 몽타주를 적용하면 위와같이 몬스터가 쉴틈없이 펀치를 날리고 있답니다…
애니메이션 몽타주를 하나 생성해줍니다. 생성된 애니메이션 몽타주를 더블클릭해서 열어주면 빈 화면과 에셋 브라우저에는 생성 가능한 애니메이션 리스트가 나옵니다.

사진은 몽타주 영역과 섹션, 노티파이에 무언가들이 추가되어있지만 새로 생성한 애님 몽타주에는 아무것도 없을것입니다.

먼저, 몽타주 영역에 사용할 애니메이션들을 애셋브라우저에서 드래그해서 올려놓아주세요.

여기서 사용된 애니메이션은 5가지 입니다.
펀치의 순서는 오른손 시전 상태 > 오른손 펀치 > 오른손 펀치 앤드 > 왼손 펀치 > 왼손 펀치 앤드이며, 입력에 따라 굵은 글씨로 표시된 애니메이션은 입력이 끝날때까지 루프를 돌게 됩니다.

몽타주 영역에 애니메이션을 등록한 순서는 시전 , R펀치1, L펀치2, R펀치 End, L펀치 End입니다.
R펀치를 도중 공격이 끝나게 되면 R펀치 End 점프하게 됩니다.
이렇게 애니메이션간 점프를 가능하게 해주기위해 애니메이션 사이에 섹션을 추가해주어야합니다.

오른손 시전 상태 애니메이션 앞에 섹션을 추가하고 'Punch Start' 이름을 변경해주겠습니다. 그리고 나머지 애니메이션들도 앞에 섹션을 추가해서 'Punch1', 'Punch2', 'PunchEnd1', 'PunchEnd2' 이름으로 섹션을 추가해주겠습니다.

섹션을 추가하게 되면 몽타주영역위에 초록색 라인으로 이름과 함께 나타나게 됩니다.


그리고, 여기서! Punch1섹션이 진행되고 있는 , 다음 애니메이션을 PuchEnd1 마무리할지, Punch2 이어나갈지에 대한 구분이 되어야합니다.
Notify 통해 Punch에니메이션에 기준을 두었습니다. Notify 도달할때까지 공격상태일때 Punch2 섹션으로 이동하고, 그렇지 않을경우 PunchEnd2 이동하게 됩니다.

그럼 이제, 노티파이 영역에 마우스로 우클릭하여 노티파이를 추가해주겠습니다.
저는 애니메이션이 거의 끝날 무렵쯤에 'isStillPuch1' 이름으로 노티파이를 추가해주었습니다. Punch2 동일하게 추가해줍니다.

저는


이제 섹션과 노티파이 추가가 되었으니, 이벤트그래프에서 몬스터의 상황에 따라 Punch1 에서 PunchEnd1, 혹은 Puch1에서 Punch2 섹션이 이동하는 등의 작업을 해보겠습니다.




그리고 여기서 몽타주 플레이에 대한 타입을 지정하는게 있습니다.
오른쪽에보면 Category>Event>Montage Tick Type 지정해주는 부분이 있는데,
여기서 Queued, Branching Point 차이점은 이벤트 발생시 즉시 실행하느냐, 대기큐에 넣고 계속 진행하느냐입니다. 전자는 Branching Point 해당하고, 후자가 Queued 해당하겠지요.
이렇게 되면 Queued 경우 이벤트의 발생보다 이상 늦어질 있다는 점도 있습니다.

저는 Branching Point 설정하여 이벤트 발생시 바로 실행되도록 하겠습니다.


이제 이벤트 그래프를 보겠습니다.
몬스터가 공격상태가 되었을 위에서 만든 애님 몽타주 에셋을 가지고 양손을 번갈아 펀치하는 이벤트를 만들겠습니다.

여기서는, 커스텀 이벤트(Custom Event) 사용하여 몬스터의 공격 이벤트를 만들었습니다. 커스텀 이벤트는 일반 Event 비슷하나, 사용자가 생성하고 EventGraph안에서 발동시킬 있다는 점이 다르다고 합니다.
블루프린트 시퀀스 어디서나 호출할 있는 자신만의 이벤트를 만들 있답니다.




, 이벤트 그래프의 공간에 우클릭을 하고 'Custom Event' 입력하면 Add Event 카테고리에 'Custom Event 추가…' 눌러줍니다. 빨간색의 커스텀 이벤트 노드가 생성되고, 다시 마우스를 우클릭하여, Montage Play 입력해 노드를 추가해줍니다.

커스텀 이벤트는 'Melee'라고 이름을 변경해 줍니다. 커스텀 이벤트와 몽타쥬 플레이 노드의 실행핀을 연결해 줍니다.



몬스터가 공격상태를 체크를해서 이벤트를 발동시킬지에 대한 노드를 연결해주어야 합니다. 몬스터의 상태값은 C++값을 가져오기 때문에 Jmonster 형변환 노드를 통해
'Is Melee'값을 얻어와 애니메이션 블루프린트 내의 변수(Is Melee) 값을 넣어줍니다.
Is Melee값이 true이면 위에서 추가했던 'Melee' 커스텀 이벤트를 발동시키게 됩니다.




몬스터의 공격상태와 현재 플레이되는 애니메이션의 프레임을 체크해 다음에 어떤 애니메이션을 플레이할지에 대한 노드를 구성해줍니다.

애님 몽타주에서 추가했던 노티파이 'isStillPunch1' 이벤트가 발생했을 몬스터가 공격상태를 유지중이라면, 'Punch2' 이어 플레이하게 됩니다.
하지만 공격상태가 중지된 경우일 Next Section으로 'PunchEnd1' 애니메이션이 대기상태에 이르게 됩니다.
'isStillPunch2' 노티파이일때도 동일한 경우겠지요.

여기서 True 대한 실행핀이 연결되지 않은 이유는, 애님 몽타주에서 섹션 영역에 Punch1섹션과 Punch2섹션을 반복 재생이 되도록 지정해주었기 때문입니다.
그래서 예외적인 경우가 아니라면 Punch1 Punch2 반복하게 되지요.



이제 이벤트 그래프까지 완료가 되었으니, 애님몽타주를 작업한 슬롯이 플레이가 되도록 추가를 해주어야 합니다.

애님 그래프로 오면, 'New State Machine' 노드와 '최종 애니메이션 포즈' 연결되어 있습니다. 몬스터가 걸어가고 서있는 모션에 대한 처리가 New State Machine 정의 되어있기 때문이지요

노드의 연결을 끊고 빈공간에 마우스 우클릭으로 아까 애님 몽타주에서 작업했던 슬롯 이름을 검색해줍니다. 특정 슬롯을 추가하지 않았기때문에 DefaultSloat으로 되어있습니다.



DefaultSlot 추가해주고 New State Machine DafulatSlot 최종 애니메이션 포즈를 연결하여 애니메이션이 플레이 있도록 만들어 주었습니다.

그러면 이벤트 그래프에서 몬스터의 공격상태에 따라 DafulatSlot 정의된 섹션들이 컨트롤되어진답니다.