가만히 서 있을 때, 걷고 있을 때 등 런타임에서 다양한 상황에 맞게 적절한 애니메이션을 출력하는 것은 게임의 완성도를 높이는 데 중요하다.
이 글에서는 간단히 애니메이션을 지정하고 이를 인게임에 적용해 보고자 한다.
먼저 스켈레톤에 대해서 간단히 정리해보자.
스켈레톤은 문자 그대로 메쉬나 애니메이션의 기반이 되는 '뼈대' 의 역할을 한다.
이렇게 스켈레톤을 기반으로 만들어진 메쉬를 Skeletal Mesh라고 한다.
예를 들어 사람 형태의 스켈레탈 메쉬를 만든다고 하면, 척추뼈나 목뼈 등을 만들어서 이를 기반으로 회전시키거나 꺾는 등 다양한 형태로 변형이 가능해진다.
또한 이러한 골격 구조에 애니메이션을 적용해서 움직임을 구현할 수 있다.
애니메이션이 적용되지 않은, 기본 스켈레탈 메쉬의 형태이다. (게임에서 버그가 나면 이런 식으로 서 있는 캐릭터를 본 적이 있다.)
다른 블루프린트와 마찬가지로, 애니메이션 블루프린트는 여러 노드와 변수들을 이어붙일 수 있다.
결과적으로 하나의 Output pose를 만드는 것이 목표이며, 다른 블루프린트처럼 execution pin의 흐름 등은 없다.
두 가지 애니메이션을 상황에 맞게 취사선택할 수 있게 하는 기능이다.
예를 들어 가만히 서 있는 애니메이션과 앞으로 걸어가는 애니메이션 사이에서 그 가중치를 다르게 함으로써 앞으로 이동하는 애니메이션을 부드럽게 구현할 수 있다.
Alpha 값은 0에서부터 1까지 변화할 수 있고, 값에 따라 A에 지정한 애니메이션과 B에 지정한 애니메이션을 적절한 비율로 섞을 수 있다.
그러나 여러 방향으로 이동하는 기능을 구현하는 등, 보다 복잡한 블렌딩 기능을 구현하기는 까다롭다. 이에 언리얼 엔진에서는 더 나은 기능을 제공하고 있다.
blend space는 2차원 공간 상의 지점에 애니메이션을 지정함으로써, 2개의 축 값에 대한 블렌드를 보다 간편하게 구현할 수 있는 기능이다.
위의 그림은 각각 X축 이동, Y축 이동을 축으로 삼아서 사방으로의 이동, 그리고 제자리에서는 Idle 애니메이션을 지정해서 전후좌우 움직임을 구현한 블렌드 스페이스의 모습이다.
Ctrl (macOS에서는 command) 키를 누른 채로 그래프 상에서 마우스 커서를 이동시키면 그 지점에 맞는 애니메이션을 프리뷰해 볼 수 있다.
위와 같은 방법 말고도 나아갈 방향의 각도와 속력을 이용해서 -180~180도의 각도 축, 0~100의 속도 축을 사용하는 방법이 가능하다.
이제 AnimGraph를 열고 BS_Locomotion을 선택한 후 연결해 주면, 블렌드 스페이스에서 정의한 애니메이션을 적용시킬 수 있다.
Angle과 Speed 변수는 이벤트 그래프에서 수정할 수 있도록 하고, 이 값에 따라 애니메이션을 변경할 수 있도록 한다.