[Unity/3D] 쿼터니언과 오일러 각 개념 정리

지즈·2024년 12월 26일
0

Unity

목록 보기
4/17

기본 개념

eulerAnglesTransform 컴포넌트에서의 회전을 표현하는 오일러 각(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를 사용하여 부드러운 회전을 구현하는 것이 더 안전하다.

profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

0개의 댓글