Unity는 왼쪽 좌표 시스템을 사용합니다. Unity에서는 오일러 각 및 쿼터니언을 모두 사용하여 회전과 방향을 나타낼 수 있습니다. 이러한 표현은 동일하지만 용도와 제한이 다릅니다.
일반적으로 오일러 각으로 방향을 표시하는 Transform 컴포넌트를 사용하여 씬에서 오브젝트를 회전시킵니다. 하지만 Unity는 회전과 방향을 내부적으로 쿼터니언으로 저장합니다. 이는 짐벌 락으로 이어질 수 있는 더 복잡한 모션에 유용할 수 있습니다.
좌표 시스템은 3차원 공간에서 오브젝트의 위치를 설명합니다. Unity는 왼쪽 좌표 시스템을 사용합니다. 양의 x축이 오른쪽을 가리키고 양의 y축이 위를 가리키고 양의 z축이 전방을 가리킵니다. Unity의 왼쪽 좌표 시스템 축은 양의 x축에서 양의 y축으로 회전하는 방향이 양의 z축을 따라 볼 때 시계 반대 방향임을 나타냅니다.
트랜스폼 좌표에서 Unity는 벡터 프로퍼티 Transform.eulerAngles X, Y, Z를 사용하여 회전을 표시합니다. 노멀 벡터와는 달리 이 값은 X, Y, Z 축에 대한 실제 회전 각도(단위: 도)를 나타냅니다.
오일러 각 회전은 세 축을 중심으로 세 개의 개별 회전을 수행합니다. Unity는 z축, x축, y축을 중심으로 순차적으로 오일러 회전을 수행합니다. 이 회전 방식은 외부 회전으로, 회전이 발생하는 동안 원래 좌표 시스템은 변경되지 않습니다.
게임 오브젝트를 회전하려면 Transform 컴포넌트에 각 축을 얼마나 회전시킬지에 대한 각도 값을 입력하면 됩니다. 스크립트로 게임 오브젝트를 회전시키려면 Transform.eulerAngles를 사용합니다. 계산과 회전을 위해 오일러 각으로 전환하면 짐벌 락 문제가 발생할 수 있습니다.
3D 공간에서 오브젝트가 자유도를 잃고 2차원 내에서만 회전할 수 있는 경우 이를 짐벌 락이라고 합니다. 두 축이 평행해지면 오일러 각에 짐벌 락이 발생할 수 있습니다. 스크립트에서 회전 값을 오일러 각으로 전환하지 않을 경우 쿼터니언을 사용하여 짐벌 락을 방지할 수 있습니다.
짐벌 락에 문제가 있는 경우 회전에 Transform.RotateAround를 사용하면 오일러 각을 피할 수 있습니다. 각 축에 Quaternion.AngleAxis를 사용하여 곱할 수도 있습니다(쿼터니언 곱하기는 각 회전을 차례로 적용).
쿼터니언은 3D 공간에서 공간 방향과 회전을 고유하게 표현하기 위한 수학 표기법을 제공합니다. 쿼터니언은 4개의 숫자를 사용하여 3D 단위 축을 중심으로 회전 방향과 각도를 인코딩합니다. 이 네 값은 각도나 도가 아닌 복잡한 숫자입니다. 자세한 내용은 쿼터니언의 수학을 참조하십시오.
Unity는 쿼터니언 회전을 계산하는 데 효율적이고 안정적이기 때문에 회전 값을 쿼터니언으로 전환하여 저장합니다. 단일 쿼터니언은 축에서 360도보다 큰 회전을 나타낼 수 없으므로 Unity 에디터는 회전을 쿼터니언으로 표시하지 않습니다.
Quaternion 클래스를 사용하는 경우 쿼터니언을 직접 사용할 수 있습니다. 회전에 스크립트를 사용하는 경우 Quaternion 클래스와 함수를 사용하여 회전 값을 생성하고 변경할 수 있습니다. 회전에 값을 오일러 각으로 적용할 수 있지만 문제를 피하기 위해 쿼터니언으로 저장해야 합니다.
다음 스크립트를 사용하여 쿼터니언과 오일러 각 간 전환하고 원하는 방식으로 회전을 보고 편집할 수 있습니다.
Quaternion.Euler 함수를 사용할 수 있습니다.Quaternion.eulerAngles 함수를 사용할 수 있습니다.