본문 바로가기
게임개발/Unity

[Unity] 게임오브젝트의 회전

by 개발도사(진) 2024. 6. 8.

x, y, z 축을 기준으로 물체의 회전 각도를 나타내는 방법을 오일러각(Euler Angle)이라고 한다. 그러나, Euler Angle로 물체를 회전시킬 때 Gimbal Lock 현상이 발생하는데, 축이 겹쳐지면서 제 기능을 못 하게 되는 현상이라고 한다.

 

우리가 Unity를 다루면서 알아야 할 것은 Euler Angle가 Gimbal Lock 문제를 내재하고 있기 때문에 Unity가 물체를 회전시킬 때 Quaternion을 사용하고, 따라서 우리는 Euler Angle을 Quaternion으로 바꾸어 사용해야 한다는 것이다.

 

1. Quaternion.Euler 값을 통해 Euler Angle을 Quaternion으로 변환.

void RotateUsingTransform()
{
    gameObject.transform.rotation = Quaternion.Euler(45,45,45);
}

 

2. Quaternion의 eulerAngles 값을 설정하고 해당 Quaternion을 rotation에 대입

void RotateUsingQuaternion()
{
    Quaternion quaternion = Quaternion.identity;
    quaternion.eulerAngles = new Vector3(45, 45, 45);
    gameObject.transform.rotation = quaternion;
}

 

3. transform의 eulerAngle 값 직접 변경

void RotateUsingEulerAngle()
{
    transform.eulerAngles = new Vector3(45, 45, 45);
}

 

위 세 코드 모드 object를 x축 기준으로 45도, y축 기준으로 45도, z축 기준으로 45도 회전시킨다. 

 

요약하자면

1. x,y,z 축을 기준으로 회전값을 나타내는 Euler Angle에는 Gimbal Lock 리스크가 존재한다.

2. 따라서, Unity는 회전값으로 해당 이슈를 해결한 Quaternion을 사용한다.

3. 이러한 이유 때문에, transform.rotation은 Quaternion이고, gameObject의 회전은 회전시키고자 하는 Euler Angle을 Quaternion 변환시킨 값을 적용하는 식으로 접근해야 한다.

'게임개발 > Unity' 카테고리의 다른 글

[Unity] JSON 이용하여 데이터 저장하기  (0) 2024.08.28
[Unity] GameObject의 이동(기본)  (0) 2024.06.10
[Unity] ScriptableObject  (0) 2024.06.09
[Unity] Unity Event  (0) 2024.06.07
[Unity-UI] Canvas - Render Mode  (1) 2023.11.12