[UE 5] 3D 게임 개발 9 - 캐릭터 회전값 고정

0시0분·2025년 4월 14일
0

UE 5

목록 보기
47/52
post-thumbnail

카메라가 좌우로 회전할 때 캐릭터가 따라 움직이지 않도록 하기 위한 방법 중에서
쉽고 빠른 방법은 Use Controller Rotation Yaw의 체크값을 해제하는 것이다.

  • 체크시

  • 해제시


Root Bone 회전

또 다른 방법으로는 Root Bone을 회전시키는 방법이 있다.

Root Bone이란 캐릭터를 구성하는 뼈대의 최상위 객체를 말한다.

최상위 뼈대이기 때문에 Root만 회전시켜도 나머지 전체가 돌아간다.

즉, 캐릭터의 Rotation 값을 직접 조절하지 않고
캐릭터가 회전한 만큼 Root Bone을 반대로 회전시켜주면 캐릭터는 고정되어있는 것처럼 보인다!

각도를 -180~180 사이로 유지해줌.


Anim GraphRotate Root Bone 함수를 추가해주면 된다.


사용하지 않을 값은 아래처럼 Expose As Pin을 꺼주면 더이상 안보인다.

결과물

카메라의 회전값만큼 Root Bone이 회전하며 캐릭터가 고정되어있는걸 알 수 있다.


90도 이상 회전시

회전각이 90도를 넘으면 캐릭터의 하체가 회전하는 기능을 추가한다.

애니메이션 추가

Idle Lower Body

  • 정면->왼쪽 회전 조건

    - Idle 상태이기 때문에 Speed 체크
    - -90도지만 90으로 체크하는 이유는 카메라 방향과 반대로 회전하기 때문에 Root Yaw Offset 값은 부호가 반대

  • 왼쪽->정면 회전 조건

    - 1. Idle Turn Left 애니메이션 재생이 90퍼 이상이거나
    - 2. 움직이기 시작했거나
    - 3. 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도 정도 오차가 발생한다. 이건 종료조건이나 커브를 좀 건드려 봐야겠다.

0개의 댓글