eulerAngles
는 Transform
컴포넌트에서의 회전을 표현하는 오일러 각(Euler Angles)을 구한다. 오일러 각이란 객체의 회전을 3개의 축(X, Y, Z)을 기준으로 표현한 것이다. 유니티에서는 Z축을 기준으로 먼저 회전하고, X축을 기준으로 두 번째 회전, 마지막으로 Y축을 기준으로 회전하는 ZXY 순서로 처리한다. 예를 들어 transform.eulerAngles = new Vector3(30, 45, 0);
이 코드는 객체를 X축으로 30도, Y축으로 45도 회전시킨다.
****각 축의 값은 보통 0 ~ 360
도 사이로 표시되는데, 음수 값이나 360도를 넘어가는 값은 내부적으로 정규화된다. 예를 들어, transform.eulerAngles = new Vector3(-90, 370, 0);
을 설정하면 유니티는 이를 Vector3(270, 10, 0)
으로 자동 변환한다.
오일러 각은 직관적이지만, Gimbal Lock이라는 문제가 발생할 수 있다. 이는 두 축이 동일한 평면에 위치하게 되어 특정 회전 방향이 잃어버리게 되는 현상이다. 이를 해결하기 위해 유니티 내부적으로는 쿼터니언(Quaternion)을 사용해 회전을 계산한다. transform.eulerAngles
는 내부 쿼터니언 값을 오일러 각으로 변환한 결과값을 제공합니다. 값을 저장할 때는 입력된 오일러 각을 쿼터니언으로 변환하여 내부적으로 저장한다.
eulerAngles
는 항상 월드 좌표계(World Space)에서의 회전 값이다. 로컬 좌표계에서 회전값을 얻고 싶다면 transform.localEulerAngles
를 사용해야 한다. transform.eulerAngles
를 읽을 때는 유니티가 내부 쿼터니언을 오일러 각으로 변환하여 제공합니다.
오일러 각을 직접 조작하여 보간하면 예상치 못한 동작을 일으킬 수 있다. 대신 *Quaternion.Lerp
또는 Quaternion.Slerp
를 사용하여 부드러운 회전을 구현하는 것이 더 안전하다.