바로 해결방법 보실 분은 우측 에서'Rotation에서 Clamp는 요렇게 쓰자' 탭으로 넘어가주세요.
준비중인 게임에서 RC Car를 만들고 있었다. Wheel Colider를 통한 이동을 구현하고자 하여 바퀴 오브젝트, Wheel Colider 오브젝트를 구분해놓은 상태였다.
Wheel Colider의 steerAngle 를 사용하면 바퀴의 회전을 쉽게 줄 수 있어 사용은 했지만, 차체가 회전을 해도 바퀴의 Mesh는 회전하지 않아 따로 회전을 시켜주게 되었다.
바퀴 오브젝트를 Wheel Colider가 회전할 때 같이 회전 시키고, Clamp 걸어두면 되겠다 라고 생각하고 적용하며 문제를 겪게되었다.
그동안 위치 값 고정을 위해 Clamp를 자주 사용했었는데 정작 회전 값에 Clamp를 걸어본적은 없어 이런 이슈가 있는지 알지 못했다.
Clamp를 -40, 40으로 걸어놓고 바퀴를 우측(양수)방향으로 회전 시키면 20, 25, 30, 35 올라가며 40이상 넘어가지 않지만 좌측(음수)방향으로 회전 시키면 갑자기 이상한 숫자가 나오고 355라는 큰 수가 찍혔다.
왜?...
구글링을 겁나게 한 결과 원인을 찾아냈다. 원인은 생각보다 간단했고 Debug에 힌트가 있었다. eulerAngles은 0 - 360까지만 반환을 해주어 0보다 작은 음수 방향으로 꺾으니 갑자기 360이란 값으로 가버린 것이다...
그럼 어떻게 해결할 수 있을까? 친절하게도 여기 Reddit 'deleted' 좌가 해결 방법도 알려주었다.
원하고자하는 eulerAngles를 미리 받아두고, 삼항연산을 통해 180보다 큰 수가 출력 되면 -360을 해주어 원하는 만큼 반대로 돌려주었다.
위에서 얻은 힌트를 바탕으로 내 코드에 적용 시켜 보니 아주 잘 해결이 되었다. 원인을 정확하게 파악한다면 해결법은 간단하지만 저렇게 풀면되겠다고 아이디어 떠올리기가 쉽지 않았다...
실제 출력되는 값들은 저렇게 335, 325이지만 -360을 해주어 원하는 값인 -40까지 제한을 걸었다.
이렇게 영상을 보면 Clamp 해준 값에 걸리게 된다.
원인을 찾는데 시간이 너무 걸렸다. 바로 구글링을 통해 문제를 해결하려 하기 보다는 왜 이런 문제가 생겼을까 고민하는 시간을 더 길게 가져봐야겠다.