앞서서 우리는 animation blueprint를 이용하여 애니메이션 시스템 제작을 하는 법을 개략적으로 배웠다.
다양한 상황에 캐릭터가 적절한 애니메이션을 재생하여 수행하도록 이를 응용하는 데에 있어서,
skeletal mesh를 소유하는 pawn의 정보를 받아 anim graph가 참조할 데이터를 제공하는 역할을 하며, bp와 cpp 두 방법으로 제작 가능하다.
anim instance의 변수 값에 따라 animation system을 설계하는 공간인데, bp만 anim graph를 제작할 수 있다.
C++로 anim instance를 제작하여 pawn의 상태 변수들을 통해 그에 따라 적절한 animation을 재생하도록 기능을 구현하자.
상황에 따른 복잡한 애니메이션 시스템의 설계를 위해, state machine을 제공한다.
FSM 같은 형태로 반복 수행할 동작 설계 단위의 State로서 정의한다.
Animation Montage 는 언리얼 엔진에서 특정 애니메이션을 조작하여 특정 이벤트나 조건에서 실행될 수 있도록 하는 시스템이다.
일반적으로 State Machine을 사용하여 애니메이션 상태 간 전환을 이루어지게 조작하지만,
공격, 스킬 캐스팅과 같은 액션들에 대해서는 원하는 타이밍에 특정 애니메이션을 수동으로 실행 하는 것이 좋은데,
이럴 때에 Animation Montage를 사용함으로 Event 와 연동하여 동작하게 한다.
델리게이트는 이벤트 시스템을 구현하는 기능으로 여러 함수를 바인딩하여 실행할 수 있다.
UE C++에서 Delegate를 사용하는 이유는 다음과 같다.
이벤트 기반 시스템 구현
버튼 클릭, 공격, 점프 등의 이벤트를 손쉽게 처리 가능
클래스 간 의존성 최소화
한 클래스에서 다른 클래스의 특정 함수를 실행할 때 직접 참조 없이 호출 가능
유연한 함수 호출
여러 개의 함수를 한 번에 실행하거나, 특정 조건에서만 실행 가능
UE C++에서 Delegate는 다음과 같은 흐름으로 사용된다고 할 수 있다.
UE C++ Delegase Usage
Given Object A and B,
- A의 C 함수를 B에 등록
- A가 B에 대해 명령
- B가 명령을 실행
- A에서 1번 과정에서 등록했던 C 함수를 호출
UE에서 animation을 재생하는 동안 특정 타이밍에 anim instance에게 신호를 보내는 animation notify 기능을 제공한다.
이 기능은 일반 animation과 animation montage 모두 사용 가능하다.