카메라가 좌우로 회전할 때 캐릭터가 따라 움직이지 않도록 하기 위한 방법 중에서
쉽고 빠른 방법은 Use Controller Rotation Yaw
의 체크값을 해제하는 것이다.
또 다른 방법으로는 Root Bone
을 회전시키는 방법이 있다.
Root Bone
이란 캐릭터를 구성하는 뼈대의 최상위 객체를 말한다.
최상위 뼈대이기 때문에 Root만 회전시켜도 나머지 전체가 돌아간다.
즉, 캐릭터의 Rotation 값을 직접 조절하지 않고
캐릭터가 회전한 만큼 Root Bone
을 반대로 회전시켜주면 캐릭터는 고정되어있는 것처럼 보인다!
각도를 -180~180 사이로 유지해줌.
Anim Graph
에 Rotate Root Bone
함수를 추가해주면 된다.
사용하지 않을 값은 아래처럼Expose As Pin
을 꺼주면 더이상 안보인다.
카메라의 회전값만큼 Root Bone
이 회전하며 캐릭터가 고정되어있는걸 알 수 있다.
회전각이 90도를 넘으면 캐릭터의 하체가 회전하는 기능을 추가한다.
Root Yaw Offset
값은 부호가 반대Idle Turn Left
애니메이션 재생이 90퍼 이상이거나Root Yaw Offset
이 음수이거나 (=오른쪽으로 회전을 시도했을 때)90도 이상 회전시 애니메이션이 재생된다.
실제 회전하는 모션을 추가하기 위해 Animation Curve
를 추가한다.
마우스 휠버튼을 누르면 키값을 추가할 수 있다.
90 / 45 / 0 으로 키값을 세군데 추가하여 90 → 0으로 내려가는 커브 그래프 생성.
회전중인지를 판단할 Turing
Meta Data도 추가 생성.
기본값으로 1을 가지는데, 해당 값을 이용해서 Turning
이 1이면 회전중이라고 판단할 수 있음.
이제 해당 커브값과 위에서 조절한 Root Yaw Offset
을 조합해 캐릭터를 회전시켜야 한다.
이해하는데 오래걸렸지만, 다시 차근차근 정리해 보겠다.
캐릭터가 오른쪽으로 90도(이상) 회전했다고 가정해보자.
90도 회전했으므로 Root Yaw Offset
은 -90이다.
이때 Curve
값은 -90 ~ 0 사이 값으로 서서히 증가한다.
즉, 회전하는 순간 Root Yaw Offset
의 값은 -90 + (-90) 으로 -180을 가지게 된다.
따라서 왼쪽으로 턴하며 회전하는 모션이 재생된다.
어차피 회전은 90도 단위로만 이루어지므로,
그 이상의 회전을 막기 위해 Root Yaw Offset
의 값을 -90 ~ 90 도 사이로 제한하는 부분을 추가한다.
정상적으로 회전 방향과 동일하게 움직이며 애니메이션이 재생된다.
👀❓ 궁금한 부분
제대로 이해한게 맞다면 한번에 큰값으로(-180 혹은 180) 뛰었다가 서서히 줄어들어야 하는데
로그를 찍어봤더니 양상은 비슷하지만 한번에 오르지는 않았다.
팍! 올랐다 서서히~ 떨어지는건 맞지만 왜 한번에 180까지 가지 않는걸까..
프레임단위로 찍어서 그런가
또, 값이 완벽히 돌아오지 않고 20도 정도 오차가 발생한다. 이건 종료조건이나 커브를 좀 건드려 봐야겠다.