Unity에서 오일러각과 쿼터니언

2023. 3. 21. 11:31·Unity
반응형
Unity에서는 게임 오브젝트의 회전을 표현하는 데에 오일러각과 쿼터니언을 모두 사용할 수 있습니다.

오일러각(Euler Angle)

오일러각은 게임 오브젝트의 회전을 각각의 축(x, y, z)을 기준으로 각도를 나타내는 방식입니다. Unity에서는 Transform 컴포넌트의 Euler Angles 속성을 통해 오일러각을 조작할 수 있습니다.

오일러각의 문제점

오일러 각도는 피치, 요 및 롤의 세 가지 각도를 사용하여 3D 공간에서 객체의 방향을 나타내는 방법입니다. Unity에서 오일러 각도는 일반적으로 게임 개체의 회전을 지정하는 데 사용됩니다. 그러나 오일러 각도를 사용하여 회전을 나타내는 데 짐벌 잠금(gimbal lock)이라고 하는 문제가 있습니다.

짐벌 잠금은 3개의 오일러 각 중 2개가 정렬되어 자유도가 1 감소하고 특정 방향을 표시할 수 없게 될 때 발생합니다. 이는 두 축이 정렬되면 두 축을 중심으로 한 회전이 동일해져서 두 축을 구별할 수 없기 때문입니다.

Unity에서 짐벌 잠금은 개체를 회전할 때 예기치 않은 동작을 유발할 수 있습니다. 예를 들어 개체를 x축을 중심으로 90도 회전한 다음 y축을 중심으로 90도 회전한 다음 z축을 중심으로 회전하려고 하면 개체가 대신 다른 축을 중심으로 회전하는 것처럼 보입니다.

짐벌 잠금을 방지하기 위해 Unity는 쿼터니언 또는 행렬 변환을 사용하는 등 회전을 나타내는 대체 방법을 제공합니다. 쿼터니언은 짐벌 잠금 문제를 방지하고 회전 사이에 부드러운 보간을 허용하므로 회전을 나타내는 보다 효율적이고 신뢰할 수 있는 방법입니다. 


쿼터니언(Quaternion)

쿼터니언은 회전을 나타내는 4차원 벡터입니다. Unity에서는 Transform 컴포넌트의 rotation 속성을 통해 쿼터니언을 조작할 수 있습니다.

오일러각과 쿼터니언의 차이점

오일러각과 쿼터니언의 가장 큰 차이점은 회전을 나타내는 방식입니다. 오일러각은 축을 기준으로 회전을 나타내는 반면, 쿼터니언은 축 자체가 회전하는 것을 나타냅니다. 이러한 차이점 때문에 쿼터니언은 회전 순서에 대한 문제가 발생하지 않으며, 보간 등의 연산에서도 더욱 정확한 결과를 얻을 수 있습니다.

 

쿼터니언 메서드

Unity에서는 쿼터니언을 다루기 위해 다양한 메서드를 제공합니다

Quaternion.Euler

public static Quaternion Euler(float x, float y, float z);
public static Quaternion Euler(Vector3 euler);

오일러각을 쿼터니언으로 변환합니다. 오일러각을 입력으로 받아 해당하는 쿼터니언을 반환합니다.

Quaternion.LookRotation

public static Quaternion LookRotation(Vector3 forward);
public static Quaternion LookRotation(Vector3 forward, Vector3 upwards);

주어진 방향 벡터를 바라보는 회전을 나타내는 쿼터니언을 반환합니다. upwards를 지정하면 해당 방향 벡터가 가리키는 방향을 위로 하는 회전을 반환합니다.

Quaternion.Slerp

public static Quaternion Slerp(Quaternion a, Quaternion b, float t);

두 쿼터니언을 구형 선형 보간합니다. t값이 0일 때 a를, 1일 때 b를 반환합니다.

 

Quaternion.Angle

public static float Angle(Quaternion a, Quaternion b);

두 쿼터니언 간의 각도 차이를 반환합니다.

Quaternion.AngleAxis

public static Quaternion AngleAxis(float angle, Vector3 axis);

주어진 축을 기준으로 주어진 각도만큼 회전하는 쿼터니언을 반환합니다.

Quaternion.Dot

public static float Dot(Quaternion a, Quaternion b);

두 쿼터니언의 내적(dot product)을 반환합니다. 두 쿼터니언이 얼마나 비슷한지를 나타내는 값입니다.

Quaternion.Inverse

public void Inverse();

쿼터니언의 역수를 반환합니다.

Quaternion.Lerp

public static Quaternion Lerp(Quaternion a, Quaternion b, float t);

두 쿼터니언을 선형 보간합니다. t값이 0일 때 a를, 1일 때 b를 반환합니다.

Quaternion.RotateTowards

public static Quaternion RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta);

주어진 두 쿼터니언 사이에서 maxDegreesDelta만큼 회전합니다.

Quaternion.ToAngleAxis

public void ToAngleAxis(out float angle, out Vector3 axis);

쿼터니언을 주어진 축과 각도로 변환합니다.

예시

// 쿼터니언 생성
Quaternion q1 = Quaternion.Euler(0, 45, 0);
Quaternion q2 = Quaternion.AngleAxis(45, Vector3.up);
Quaternion q3 = Quaternion.LookRotation(Vector3.forward, Vector3.up);

// 쿼터니언 연산
Quaternion q4 = q1 * q2;
Quaternion q5 = Quaternion.Slerp(q1, q2, 0.5f);

// 오일러각으로 변환
Vector3 euler = q1.eulerAngles;

// 쿼터니언 메서드 사용
float angle = Quaternion.Angle(q1, q2);
Vector3 axis;
Quaternion.FromToRotation(Vector3.up, Vector3.forward).ToAngleAxis(out angle, out axis);

저작자표시 비영리 변경금지 (새창열림)

'Unity' 카테고리의 다른 글

Unity Collider 컴포넌트  (1) 2023.03.23
Unity 수학 함수 Mathf  (0) 2023.03.22
Unity에서 게임 오브젝트 회전하는 방법  (0) 2023.03.19
Unity에서 게임 오브젝트 위치 이동 시키기  (0) 2023.03.18
연산자란? 연산자 종류 - 단항 연산자, 이항 연산자, 삼항 연산자  (0) 2023.03.16
'Unity' 카테고리의 다른 글
  • Unity Collider 컴포넌트
  • Unity 수학 함수 Mathf
  • Unity에서 게임 오브젝트 회전하는 방법
  • Unity에서 게임 오브젝트 위치 이동 시키기
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    상품 리뷰 크롤링
    codingtips
    rtsp
    셀레니움
    리스트
    스크립트 실행
    스마트스토어리뷰
    programming101
    list
    cv2
    ipcamera
    리뷰이관
    appdevelopment
    파이썬
    codingcommunity
    긴유통기한우유
    쇼핑몰리뷰
    programmerlife
    믈레코비타멸균우유
    리뷰관리
    라떼우유
    learntocode
    유니티
    카페24리뷰이관
    Python
    unity
    C#
    스크립트 실행 순서
    카페24리뷰
    devlife
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity에서 오일러각과 쿼터니언
상단으로

티스토리툴바