TIL

[TIL] 내일배움캠프_Unity Blend Tree, 믹사모 애니메이션 InPlace 오류 및 해결

Hwone 2023. 10. 10. 23:06

Blend Tree 

: 여러 가지 애니메이션 동작을 조합하여 부드럽게 전환이 가능하고 다양한 동작을 제어할 수 있으며 매개변수를 이용하여 동적으로 애니메이션을 제어할 수 있는 도구이다 

 

예를 들어, 캐릭터가 걷는 동작과 달리기 동작을 조합하여 서서히 가속하거나 감속하는 효과를 만들 수 있다 

 

이번 개인과제에서 캐릭터의 이동이 4방향(forward, back, right, left) 으로 자연스럽게 움직이게 하기 위해서 블렌드 트리를 사용하였다 

 

언리얼에서도 애니메이션을 섞고 조합하는 Blend 기능이 있어서 당연히 유니티도 있겠지 라고 생각한 결과 역시나 있었고 크게 다르지 않아 어렵지 않게 구현할 수 있었다

믹사모 애니메이션 InPlace 오류 및 해결

유니티 3D에서도 어김없이 믹사모가 등장하였다 하지만 블렌더를 사용하지 않고도 유니티에 있는 기능들로도 충분히 애니메이션을 받아오고 본 루트를 맞출 수 있어서 아주 편리했다 

 

하지만 오늘 예상하지 못한 버그 하나가 있었는데 믹사모에 내가 사용할 캐릭터 메쉬를 업로드 후 원하는 애니메이션을 다운받으려 할 때 inplace ( 애니메이션에 의해 이동하지 않는) 버튼이 사라져 있었다 분명 있었는데 ...? 

 

그래서 유니티에 있는 기능들로 애니메이션을 멈춰야 했고 애니메이션 설정들을 공부하게 되었다 

 

루트 모션 : 오브젝트의 위치와 회전을 애니메이션이 제어할 수 있도록 허용하는 것 

( 이 옵션이 활성화 되어 오브젝트의 트랜스폼값은 영향을 받아 변하게 된다) 

 

왜 이것을 비활성화를 시키냐면 ... ! 

스크립트를 통해 움직임을 제어하는 부분과 애니메이션을 통해 움직임을 제어하는 부분이 충돌하게 되어 이상한 움직임이

포착될 수도 있고 실제로 게임을 플레이해본다면 굉장히 어색하다고 느껴진다 (오브젝트의 트랜스폼이 변하기 때문) 

 

이를 해결하는 가장 간단한 방법은 Animator에 ApplyRootMotion 을 비활성화 해주는 것이다 

 

하지만 애니메이션에 따라 루트모션이 더 자연스러운 움직임을 연출하는 경우도 있기 때문에 개별적으로도 관리할 수 있다 

 

애니메이션 정보에 들어가면, 여러 설정들이 있다 

 

Root Transform Rotation

Bake Into Pose 활성화 시 게임 오브젝트가 애니메이션에 의해 전혀 회전되지 않는다 

* 적절한 후보는 직진 보행 또는 달리기 ( 시작과 종료 시점이 비슷한 애니메이션만 사용하길 권장) 

Based Upon(at Start)  캐릭터의 중심 좌표를 설정 

- Body Orientation :  몸을 기준으로 한 앞 방향 벡터를 따른다 

- Original : 해당 애니메이션을 만들었던 사람이 설정한 중심을 유지하려고 한다 

 

RootTransformPosition (Y)

게임 오브젝트의 위치 값 중 Y 값을 기존 트랜스폼으로 유지되게 할 수 있다 

Based Upon 

- Feet : 발이 바닥에 닿도록 한다 

- Center of Mass :  무게 중심 

 

RootTransformPosition (x,z)

게임 오브젝트의 위치 값 중 X,Z 값을 기존 트랜스폼으로 유지되게 할 수 있다 

 

위의 있는 설정들을 전부 활성화 및 그에 맞는 설정을 해주면 더이상 애니메이션은 루트 모션에 의해 제어되지 않는다 !