Version: 2023.1
언어: 한국어
스케일 제약
광원

Unity의 회전 및 방향

Unity는 왼쪽 좌표 시스템을 사용합니다.Unity에서는 오일러 각과 쿼터니언을 모두 사용하여 회전과 방향을 나타낼 수 있습니다.이러한 표현은 동일하지만 용도와 한계가 다릅니다.

보통 씬에서는 방향을 오일러 각으로 표시하는 트랜스폼 컴포넌트를 사용하여 오브젝트를 회전합니다. 그러나 Unity는 회전과 방향을 내부적으로 쿼터니언으로 저장하므로 짐벌 락으로 이어질 수도 있는 더 복잡한 모션에 유용할 수 있습니다.

왼쪽 좌표 시스템

Unity의 왼쪽 좌표 시스템 축으로, 양수 x축에서 양수 y축으로 회전하는 방향은 양수 z축을 따라 볼 때 시계 반대 방향입니다.
Unity의 왼쪽 좌표 시스템 축으로, 양수 x축에서 양수 y축으로 회전하는 방향은 양수 z축을 따라 볼 때 시계 반대 방향입니다.

좌표 시스템은 3차원 공간에서 오브젝트의 포지션을 설명합니다.Unity는 왼쪽 좌표 시스템을 사용합니다. 양수인 X축은 오른쪽을 가리키고, 양수인 Y축은 위쪽을 가리키며, 양수인 Z축은 앞쪽을 가리킵니다.Unity 왼쪽 좌표 시스템으로, 양수 x축에서 양수 y축으로 회전하는 방향은 양수 z축을 따라 볼 때 시계 반대 방향입니다.

오일러 각

트랜스폼 좌표에서 Unity는 벡터 프로퍼티 Transform.eulerAngles X, Y, Z를 사용하여 회전을 표시합니다. 노멀 벡터와는 달리 이 값은 X, Y, Z 축에 대한 실제 회전 각도(단위: 도)를 나타냅니다.

오일러 각 회전은 3개의 축을 중심으로 3개의 개별 회전을 수행합니다. Unity는 Z축, X축, Y축을 중심으로 오일러 회전을 순차적으로 수행합니다. 이 회전 방법은 외부 회전입니다. 회전하는 동안 원래 좌표계가 변경되지 않습니다.

게임 오브젝트를 회전하려면 각 축이 트랜스폼 컴포넌트로 회전할 각의 크기를 입력할 수 있습니다. 스크립트로 게임 오브젝트를 회전하려면 Transform.eulerAngles를 사용합니다. 오일러 각으로 변환하여 계산하고 회전하려면 짐벌 락 문제가 발생할 위험이 있습니다.

짐벌 락

3D 공간에 있는 오브젝트가 자유도를 잃고 2차원 내에서만 회전할 수 있는 경우를 짐벌 락이라고 합니다. 두 축이 평행하면 오일러 각으로 짐벌 락이 발생할 수 있습니다. 스크립트에서 회전 값을 오일러 각으로 변환하지 않으면 쿼터니언을 사용하여 짐벌 락을 방지해야 합니다.

짐벌 락 문제가 있는 경우 Transform.RotateAround를 사용하면 오일러 각을 피할 수 있습니다. 각 축에 Quaternion.AngleAxis를 사용하여 함께 곱할 수도 있습니다(쿼터니언 곱셈은 각 회전에 차례로 적용됩니다).

쿼터니언

쿼터니언은 3D 공간에서 공간 방향과 회전의 고유한 표현을 위한 수학적 표기법을 제공합니다. 쿼터니언은 4개의 숫자를 사용하여 3D에서 단위 축을 중심으로 회전 방향과 각도를 인코딩합니다. 이 4개의 값은 각이나 각의 크기가 아닌 복소수입니다. 자세한 내용은 쿼터니언의 수학을 참조하십시오.

쿼터니언 회전은 계산이 효율적이고 안정적이기 때문에 Unity는 회전 값을 쿼터니언으로 전환하여 저장합니다.단일 쿼터니언은 어떤 축에 대해서도 360도보다 큰 회전을 나타낼 수 없기 때문에 Unity 에디터는 회전을 쿼터니언으로 표시하지 않습니다.

Quaternion 클래스를 사용하면 쿼터니언을 직접 사용할 수 있습니다.회전에 스크립트를 사용하는 경우 쿼터니언 클래스와 함수를 사용하여 회전 값을 생성하고 변경할 수 있습니다.회전 값은 오일러 각으로 적용할 수 있지만 문제를 방지하려면 쿼터니언으로 저장해야 합니다.

오일러 각과 쿼터니언 간의 전환

다음 스크립트를 사용하여 쿼터니언과 오일러 각 간을 변환하고 원하는 방식으로 회전을 보고 편집할 수 있습니다.

  • Quaternion.Euler 함수를 사용하여 오일러 각도에서 쿼터니언으로 변환할 수 있습니다.
  • Quaternion.eulerAngles 함수를 사용하여 쿼터니언을 오일러 각으로 변환할 수 있습니다.

추가 리소스

스케일 제약
광원