Direct 환경에서 작업했었을땐 애니메이션 하나 추가하고 사용하는데 아주 번거로운 과정이 있었는데 언리얼 엔진에서 애니메이션을 사용해보니 굉장히 쉽고 직관적이게 되어있습니다
언리얼 엔진도 내부적으론 같은 방식을 사용하고 있을거라고 생각합니다
특정 본에 애니메이션의 현재 프레임에 해당하는 행렬 연산을 하여 포즈를 만들고 이작업을 구면선형보간 하여 연속적인 동작을 만드는 과정이죠
*구면 선형보간을 하지 않을 경우 직선거리로 이동되어 부드러운 모션이 나오지 않습니다
모션 블렌딩 또한 행렬 연산으로 현재 가야할 본의 위치와 방향등의 정보를 다른 애니메이션의 정보와 선형보간하여 두 애니메이션의 블렌딩을 표현 할 수 있습니다.
하여간 3D를 파다보면 선형보간이 계속해서 튀어나옵니다..
블렌드 스페이스 1D


해당 BlendSpace를 애니메이션 블루프린트에서 가져와 현재 속도 값을 넣어주면 속도에 따른 블렌딩된 애니메이션이 나타나게 됩니다.

블렌드 스페이스
1D스페이스 보다 데이터를 더 사용할 수 있습니다
방향에 맞게 Left / Right , Front / Back 로 이름을 지어주고 -1~1 값을 지정해줬습니다

이번 블렌드 스페이스에는 캐릭터의 방향에 따른 기울기를 설정하겠습니다
정지 모션을 additive로 사용할때 블렌드 스페이스에 올리지 못하는 경우가 있는데 이 경우는 모션마다 additive 세팅에서 베이스가 될 포즈를 저장해주면 됩니다

Apply Additive 노드를 사용해 연결해주면 기울기가 "더해진" 달리기 애니메이션을 볼 수 있습니다
Additive란 말 그대로 두 애니메이션의 차이를 더해주는 개념입니다
앞서 사용된 달리기와 기울기 포즈는 같은 달리기 포즈를 기반으로 만들어져 있기 때문에 두 포즈의 차이인 기울기가 더해진다고 생각해볼 수 있습니다 전혀 상관 없는 두 애니메이션을 더하면 자연스러운 움직임을 나오게 하는데 추가적인 보정이 필요할 수 있습니다

+덤
기울기 블렌드스페이스에 값을 줄 때 Front/Back은 속도정도로 간단히 구할 수 있지만 Left/Right는 자연스러운 값을 주기 위해 캐릭터가 이동하려는 방향의 점진적인 값을 구해줄 필요가 있습니다
해당 값을 코드에서 가져와봅시다
먼저 이동할 방향에 따라 좌우의 구분은 벡터의 외적을 통해 구할 수 있습니다
전진 방향을 기준으로 이동방향을 외적한 값이 음수가 나오면 좌측 양수가 나오면 우측값을 나타내고 90도 기준으로 -1~1까지 표현되니 위의 L(-1) 정지(0) R(1)에 알맞는 데이터로 사용해 볼 수 있습니다
*외적값을 사용할때 0~90도의 각도가 정확히 0~1값으로 매칭(45도일떄 0.5)되지는 않으니 정확한 값이 필요한 경우 따로 내적값을 이용해 Degree로 변환된 각도를 구해서 사용해야 합니다

원하는 값을 구했다면 UFUNCTION()에 BlueprintCallable를 넣어주어 블루프린트에서 읽어올 수 있는 함수를 만들 수 있습니다


애니메이션 블루프린트에서 위에서 만든 함수를 불러와 현재 값을 전달할 수 있습니다.
