언리얼 엔진 5

언리얼엔진5 C++로 정복하기(5) 몽타주(Monatage) 애니메이션

Voitcon 2024. 2. 2. 18:20

마우스 좌클릭을 눌렀을때 공격하는 애니메이션을 만들려면 어떻게 해야할까?

간단하게 알아보자!

몽타쥬 애니메이션으로 공격 기능을 사용해본 결과 언리얼엔진이 유니티보다 애니메이션 짜기 훨씬 쉽다는걸 알 수 있다..

유니티에서 기능이 있는지 모르겠지만 애니메이션 중간에 파티클 이펙트, 사운드까지 추가 할 수 있다.. 얼마나 좋은가!

일단 플레이어 헤더파일에서 UAnimMonatge 를 선언하여 블루프린트에 애니메이션 몽타주를 삽입할 수 있도록 한다.

애니메이션 몽타주를 만들어서 기깔나게 애니메이션을 만들어보자 중간에 소리도 넣고 해보자!

만들어진 몽타주를 블루프린트에 넣어주고 프로젝트 세팅에서 입력칸에 마우스 좌클릭시 공격이라는 입력을 추가한후 코드로 바인딩을 해주고 코드상으로 마우스 좌클릭시에 Montage_Play를 해주면 마우스 좌클릭시 공격하는 애니메이션이 나온다.

 

하지만 그렇게만 하면 공격하면서 앞으로 이동하면 미끄러지는 현상이 발생하고, 마우스 좌클릭을 연속으로 누르면 애니메이션이 연속으로 이상하게 실행되는데, 이럴때 해결법은 enum class 를 이용하여 플레이어 상태를 만들어 코드로 제어하는것이 좋다.

예를 들어 공격 애니메이션은 플레이어 상태가 장비가 착용되어 있지 않을때만 실행하고 공격이 실행되면 

상태를 공격상태로 만든다. 하지만 이렇게만 하면 EActionState가 attacking에서 unoccupied로 바뀌지 않아 다시 공격을 못하는데, 

attackend 함수로 다시 플레이어 상태를 unoccupied로 바꾸자. 근데 어디서 실행하냐..

일단 AttactEnd 함수를 블루프린트에서 호출할 수 있게 선언을 해줍니다. public!

애니메이션 몽타주를 짤때 AttackEnd라는 노티파이 구간을 만들었는데 

플레이어 애니메이션 블루프린트에 이벤트 그래프에서 Attackend를 치면 노티파이 노드가 있는데 해당 위에 처럼 선언하면 플레이어 공격 애니메이션이 끝날때 AttackEnd 함수가 호출되서 플레이어의 상태가 바뀐다.

그리고 추가로 미끄러지는 현상은 플레이어 이동 함수에 위처럼 공격상태일때 return을 해주면 플레이어가 공격도중 이동할 수 없게 만들 수 있다.