[Unity] 회전각을 제한하는 경우 각도가 급작스럽게 바뀌는 이슈
2024. 8. 3.

문제 원인

1. 오일러 각도의 불연속성: 오일러 각도는 0도에서 360도 사이의 값을 가지는데, 0에서 360도로 변경될 때, 실제 회전은 연속적이지 않다.

2. 각도 제한 불연속성: 오일러 각도를 특정 범위로 제한 할때, 범위를 벗어난 각도가 급격히 클램핑된 값으로 변경될 수 있다.

 

해결 방법

- 오일러 각도를 -180 ~ 180도 사이로 변환하여 제한하면, 회전이 더 부드럽고 일관되게 된다.

 

ex) 오일러 각도가 180도를 초과할 경우, 360을 빼서 음수 값으로 변환합니다. 이렇게 하면 각도가 -180도에서 180도 사이의 범위로 조정됩니다. 예를 들어, 270도는 -90도로 변환됩니다.

 

        private float minX = -10.5f, maxX = 9.5f;
        public void Update()
        {
            //Eluer로 변경
            Vector3 targetEuler = transform.eulerAngles;

            //갑자기 확 회전하는 문제를 고치는 방법 180도가 넘어갈 때 360도를 뺀다. (해결 코드)
            targetEuler.x = (targetEuler.x > 180) ? targetEuler.x - 360 : targetEuler.x;

            //Clamp 제한
            targetEuler.x = Mathf.Clamp(targetEuler.x, minX, maxX);

            transform.rotation = Quaternion.Euler(targetEuler);
        }