게임의 기본동작 회전
7번째 줄 : 트랜스폼(transform)중 초기 회전(rotation) 값을 지정한다. 오일러각(Euler Angle)을 이용해 지정.
11번째 줄 : 트랜스폼(transform)중 초기 회전(rotation)값을 지정한다. 9번째 줄에서 쿼터니안값(Quaternion)을 만들고
이를 이용해 지정.
13번째 줄 : 트랜스폼(transform)중 회전 값을 현재 값에서 지정한 값만큼 회전(Rotate) 시킨다.
* 7번째 줄의 코드가 실행됐을때 Y축으로 50도 회전한 값이 초깃값으로 지정된다.
11번째 줄의 코드가 실행됐을때 Y축으로 100도 회전한 값이 초기 값으로 다시 지정된다.
13번째 줄의 코드가 실행됐을때 Y축으로 90도 회전하는 동작이 일어난다.
결과적으로 Y축 각은 50도(초기값) -> 100도(기존값을 재 초기화) -> 90도 더 돌려 = Y축 190도 회전
(상자 회전 전)
(상자 회전 후)
쿼터니언 회전은 오일러 회전의 짐벌락이 발생하지 않지만 복잡한 숫자를 기반으로 하므로 직관적으로 이해하기가 쉽지 않다.
또한 개별 쿼터니언 구성요소(x,y,z,w)에 접근하거나 수정하지 못한다.
※ 짐벌락(Gimbal Lock)
짐벌락은 오일러 회전을 할 때 발생한다. 컴퓨터의 연산에서 오일러 회전은 x,y,z나 y,z,x등 순서대로 할 수 밖에 없으므로
나중에 이뤄지는 회전은 먼저 이뤄진 회전에 종속된다. 이를 예방하기 위해 쿼터니언(사원수)을 사용한다.
쿼터니언은 3개의 축이 동시에 연산 되므로 짐벌락이 발생하지 않는다.
-> x, y 축을 회전시키면, x y 가 동시에 회전되지않고 컴퓨터 연산상 입력값이 들어온것 부터
[ ex) x축이 회전되고 그 다음 y축이 회전되어, 동시에 이루어지지 않는 현상 ]
회전하게 되는 현상들을 예방하기 위해 쿼터니언을 사용. -> 즉, 따로따로 회전되는것을 동시에 연산하여 회전시키 위해 사용
'UNITY > Basic' 카테고리의 다른 글
Vector3의 magnitude와 normalized (0) | 2020.06.30 |
---|---|
Jump (0) | 2016.12.28 |
Throw (0) | 2016.12.28 |
identity(회전 일치) (0) | 2016.12.27 |
Player basic move (0) | 2016.11.21 |
댓글