문제 원인
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);
}
'Unity' 카테고리의 다른 글
[Unity] Auto Scrolling Text 기능 (Feat. DOTween) (0) | 2024.08.26 |
---|---|
[Unity] 벡터(Vector) 개념 (0) | 2024.08.23 |
[Unity] 피봇(Pivot) & 앵커(Anchor) (0) | 2024.08.21 |
[Unity] EventSystem 인터페이스 (0) | 2024.08.10 |
[Unity] 유니티 게임의 라이프사이클 (1) | 2023.04.19 |