Unity - Rotation에 Mathf.Clamp 적용, WheelColider 바퀴 회전

Justin·2022년 5월 29일
0

바로 해결방법 보실 분은 우측 에서'Rotation에서 Clamp는 요렇게 쓰자' 탭으로 넘어가주세요.

왜 이번 문제를 겪게 되었는가

준비중인 게임에서 RC Car를 만들고 있었다. Wheel Colider를 통한 이동을 구현하고자 하여 바퀴 오브젝트, Wheel Colider 오브젝트를 구분해놓은 상태였다.

Wheel Colider의 steerAngle 를 사용하면 바퀴의 회전을 쉽게 줄 수 있어 사용은 했지만, 차체가 회전을 해도 바퀴의 Mesh는 회전하지 않아 따로 회전을 시켜주게 되었다.

바퀴 오브젝트를 Wheel Colider가 회전할 때 같이 회전 시키고, Clamp 걸어두면 되겠다 라고 생각하고 적용하며 문제를 겪게되었다.


Rotation에 Clamp 왜 안됨..?

그동안 위치 값 고정을 위해 Clamp를 자주 사용했었는데 정작 회전 값에 Clamp를 걸어본적은 없어 이런 이슈가 있는지 알지 못했다.

Clamp를 -40, 40으로 걸어놓고 바퀴를 우측(양수)방향으로 회전 시키면 20, 25, 30, 35 올라가며 40이상 넘어가지 않지만 좌측(음수)방향으로 회전 시키면 갑자기 이상한 숫자가 나오고 355라는 큰 수가 찍혔다.

왜?...

구글링을 겁나게 한 결과 원인을 찾아냈다. 원인은 생각보다 간단했고 Debug에 힌트가 있었다. eulerAngles은 0 - 360까지만 반환을 해주어 0보다 작은 음수 방향으로 꺾으니 갑자기 360이란 값으로 가버린 것이다...

Rotation에서 Clamp는 요렇게 쓰자

그럼 어떻게 해결할 수 있을까? 친절하게도 여기 Reddit 'deleted' 좌가 해결 방법도 알려주었다.

원하고자하는 eulerAngles를 미리 받아두고, 삼항연산을 통해 180보다 큰 수가 출력 되면 -360을 해주어 원하는 만큼 반대로 돌려주었다.

위에서 얻은 힌트를 바탕으로 내 코드에 적용 시켜 보니 아주 잘 해결이 되었다. 원인을 정확하게 파악한다면 해결법은 간단하지만 저렇게 풀면되겠다고 아이디어 떠올리기가 쉽지 않았다...

실제 출력되는 값들은 저렇게 335, 325이지만 -360을 해주어 원하는 값인 -40까지 제한을 걸었다.

이렇게 영상을 보면 Clamp 해준 값에 걸리게 된다.

https://youtu.be/HgDQWaCNUEo


셀프 피드백

원인을 찾는데 시간이 너무 걸렸다. 바로 구글링을 통해 문제를 해결하려 하기 보다는 왜 이런 문제가 생겼을까 고민하는 시간을 더 길게 가져봐야겠다.

profile
인디 게임을 만들며 공부하고 있습니다.

0개의 댓글