[이득우 언리얼 C++] 8. 애니메이션 시스템 활용
- 📕 Book/이득우 언리얼 C++
- 2022. 1. 17.
💻 Code : https://github.com/tedison7/ArenaBattle
애니메이션 몽타주
주어진 4개의 공격 애니메이션을 가지고 애니메이션 몽타주를 활용하여 콤보 공격을 구현해보자. 캐릭터 애니메이션 창을 열고 애님 몽타주 생성 메뉴를 눌러 몽타주 애셋을 생성한다.
몽타주는 섹션(Section) 단위로 애니메이션을 관리한다. 몽타주 애셋을 생성하면 기본으로 Default 이름의 섹션이 주어진다. 섹션을 선택하고 디테일 창에서 섹션 이름을 Attack1로 변경하였다.
Attack1 ~ Attack4 까지 애니메이션을 섹션에 드래그로 등록하고 각 애니메이션들의 끝시간 항목을 수정하여 연속 공격 모션처럼 보이도록 하였다.
그리고 입력 설정창으로 가서 Action Mappings에 Attack 입력을 왼쪽 클릭으로 지정한다.
책 예제를 따라 코드를 작성하였고, 애니메이션 블루프린트 애셋에서 애님 그래프를 클릭하여 DefaultSlot 을 통해 재생할수 있도록 설정하였다.
컴파일 후 실행하여 왼쪽 클릭으로 공격시 애니메이션 몽타주가 재생됨을 확인할 수 있다.
델리게이트
델리게이트(Delegate)는 A객체가 B 객체에 작업 명령을 내릴 때 B 객체에 자신을 등록하고 B의 작업이 끝나면 A에게 알려주는 설계 방식을 의미한다. 이전에는 애니메이션 몽타주가 재생중이 아닐때에 애니메이션 몽타주가 재생되도록 작업했는데 이번에는 애님 인스턴스에서 제공하는 OnMontageEnded 델리게이트를 통해 애니메이션 몽타주가 끝날 때까지 몽타주 재생 명령을 내리지 못하게 막아보자.
애니메이션 노티파이
애니메이션 노티파이는 애니메이션 재생하는 동안 특정 타이밍에 애님 인스턴스에게 신호를 보내는 기능이다. 애니메이션 시퀀스와 몽타주 모두 사용 가능하다. 몽타주 창을 열어 AttackHitCheck 이름의 노티파이를 추가하였고, 예제를 따라 코드를 작성하였다.
컴파일후 플레이를 통해 공격을 해보면 몽타주 재생에 따라 네번의 노티파이가 발생함을 확인할 수 있다.
콤보 공격의 구현
각 공격 동작을 섹션으로 분리후 콤보공격을 구현해보자. Attack2, Attack3, Attack4 섹션을 추가하고 각 섹션마다 애니메이션을 하나씩 할당하였다. 그리고 섹션창에서 하나로 연결되어있던 섹션들을 분리하였고, NextAttackCheck 노티파이를 추가하였다.
모든 노티파이는 디테일 창에서 Montage Tick Type을 Branching Point로 변경하였다.
그리고 예제를 따라 코드를 작성하였다. 작성한 코드는 Github에 올려두었다. 플레이해보니 애니메이션 속도가 빨라서인지 콤보공격을할 타이밍을 잡기가 어려워 애니메이션 속도를 0.6배속으로 재생하도록 하였다.
요약
- 애니메이션 몽타주의 섹션 개념을 통한 공격 콤보 기능 제작
- 애니메이션 노티파이를 통한 이벤트 호출
- 델리게이트의 개념