-
Euler angle
- 유니티에서 회전은 크게 Euler angle / Quaternion 으로 표현된다.
오일러(Euler) 방식은 X,Y,Z 축을 기준으로 회전 값 만큼 회전 시키는 우리에게 익숙한 방식이다. 하지만 이는 "짐벌락" (세 회전을 차례로 적용 시 이전 두 회전의 결과로 세 번째 축이 이전 축 중 하나와 같은 방향을 가리킬 수 있다는 문제)을 야기하므로, 유니티 내부에서는 쿼터니언(Quaternion) 방식을 취한다.
위처럼 inspector에서 직접 rotation 값을 변경하는 방식은 오일러 방식이지만 실제로 유니티 내부에서는 쿼터니언 방식으로 저장된다.
-
Quaternion
- 유니티 내부에서 오브젝트 회전을 표기하는 방식으로 x,y,z,w 네 개의 값으로 표현되지만, 사용자가 직접적으로 알 필요는 없다. (다시 시간을 내어 원리에 대해 공부할 생각이다.)
우선 기초를 공부하는 입장에서 우리에게 익숙한 오일러 방식을 쿼터니언 방식으로 변환하는 방법을 공부하고, 그것으로 오브젝트를 rotation 값을 변경하는 것을 목표로 하였다.
- Quaternion 클래스를 이용하면 편한게 쿼터니언 방식을 다룰 수 있다.
transform.rotation = Quaternion.Euler(10, 20, 30);
-
transform.Rotate
위처럼 Quaternion.Euler() 메소드를 이용해서 원하는 rotation 값을 지정할 수 있고, Rotate 메소드로 기준 축과 정도를 지정할 수 도 있다.
transform.Rotate(new Vector3(0, 1, 0) * Time.deltaTime);
transform.Rotate(0,Time.deltaTime * 100,0);
transform.Rotate(Vector3.up, Time.deltaTime * 100);
세가지 모두 같은 결과를 낸다. Translate()과 마찬가지로 서로 다른 frame rate 환경에서도 동일한 시간 대비 회전을 주기 위해 Time.deltaTime을 곱하였다.