[Unity] Euler 회전과 Quaternion 회전

2023. 8. 28. 16:57Unity

728x90
반응형

Euler

-x, y, z 축으로 기준으로 하는 회전. 축이 겹쳐질 때 어떤 축인지 구별할 수 없는 짐벌락 현상이 벌어진다.

 

Quaternion

-x, y, z, w 네 축으로 각도를 표현. 유니티 에디터 상에서는 x, y, z의 오일러 각도를 쓰는 것처럼 보이지만 내부적으로 코드단에서 쿼터니언으로 동작함.

 

 


 

 

public class Test : MonoBehaviour
{
    float speed = 30;
    void Update()
    {
        Quaternion rot = transform.rotation;
        rot.x += Time.deltaTime * 10;
        transfrom.rotation = rot;
    }
}
public class Test : MonoBehaviour
{
    float speed = 30;
    void Update()
    {
        Vector3 vec = transform.rotation.eulerAngles;
        vec.x += Time.deltaTime * speed;
        transform.rotation = Quaternion.Euler(vec);
    }
}

위의 두 스크립트로 회전을 적용하면 오류가 발생한다.

 

 


 

 

오류가 발생하지 않게 하기 위해서는 값을 가져와서 계산하고 다시 대입하는 방식이 아니라 계속 값을 잡아서 계산해야 한다.

public class Test : MonoBehaviour
{
    float speed = 30;
    Vector3 vec;

    void Update()
    {
        vec.x += Time.deltaTime * speed;
        transform.rotation = Quaternion.Euler(vec);
    }
}
public class Test : MonoBehaviour
{
    float x;

    void Update()
    {
        x = Time.deltaTime * 10;
        transform.rotation = Quaternion.Euler(x, 0, 0);
    }
}
728x90
반응형