게임 개발을 하면 오브젝트를 회전시켜야 될 일이 정말 많다.
회전을 시키면 두가지 개념을 보게 되는데
오일러 각과 쿼터니언이다.
오일러 각(Euler Angle)
-3차원 공간의 절대적 좌표를 기준으로 물체의 회전을 측정하는 방법
-X,Y,Z 축을 기준으로 회전하기 때문에 직관적이고 조작이 용이함
-180도가 넘는 회전의 표현이 가능
-3번에 나누어 계산하기 떄문에 비용으 크며 짐벌락 현상이 발생할수 있음
짐벌락 : 두개의 회전 축이 서로 겹쳐지는 현상
https://www.youtube.com/watch?t=97&v=zc8b2Jo7mno&feature=youtu.be
쿼터니언(Quaternion)
-방향과 회전을 표현하는 방식
-4차원 복소수를 이용한 회전표현 방법 ( x,y,z,w)로 이루어져 있고 , 각 성분은 축이나 각도가 아니다.
-180도가 넘는 회전을 표현하지 못한다 ( 180도 넘는 표현은 179 + 130 이런식으로 더해서 표현한다)
-각 축을 한번에 계산하여 비용이 적고 짐벌락이 발생하지 않는다.
위의 각 오일러 각 , 쿼터니언의 특징을 알고있으면 게임 개발시 많은 도움을 받을 수있다.
유니티는 Inspector 에서 나오는 Rotation(회전)은 vector3로 표현이 된다. 즉, 오일러 각을 의미한다.
하지만 유니티 내부에서는 회전을 계산시에 오일러각이 아닌 쿼터니언을 사용하게된다.
즉, 코드내부에서 회전을 시킬경우 쿼터니언 메서드들을 사용해서 회전을 시켜줘야한다.
쿼터니언은 많은 메서드를 가지고 있지만 자주 사용하는것을 몇개 기록하였다.
1. Quaternion.Euler(x,y,z) : 오일러각을 쿼터니언으로 변경
두 벡터의 거리(Vector2 direction)를 인자값으로 아크탄젠트를 이용하여 각도(rotZ)를 반환받은뒤
해당 각도를 이용하여 객체(armPivot)을 회전시키고 있다.
2. Quaternion.LookRotation : 머리를 회전하는 것처럼, 앞과 위를 특정한 방향으로 하는 회전 쿼터니언을 만듬
3. Quaternion,Slerp : 쿼터니언과 다른 쿼터니언 사이 내분점을 알수 있음,
구형보간 기법(Spherical Linear Interpolation)을 활용해서 쿼터니언에 쓰면 더 정확해짐
ex)두 쿼터니언 Q1,Q2가 있을때 30% 지점은 어디일까? 같은 문제를 풀기 유용해짐
쿼터니언과 벡터의 곱셈
쿼티니언을 활용해 객체의 회전뿐만아닌 벡터의 회전도 가능하다.
즉, 오른쪽으로 이동중인 객체를 위쪽으로 회전하는 구현이 가능하다.
유니티에서는 쿼터니언과 벡터의 곱을 지원하기에 순서만 맞춰서 코드를 작성해주면된다.
쿼터니언 * 벡터 이 순서대로 계산해주면된다.
'Unity' 카테고리의 다른 글
Unity :: StringToHash 메서드 사용하기(애니메이터 컨트롤러) (0) | 2024.10.14 |
---|---|
Unity :: 스크립트에서 InputSystem을 사용하기 위해 InputActionAsset을 호출시 주의할 점 (0) | 2024.10.10 |
Unity :: ScriptableObject(스크립타블오브젝트) (0) | 2024.10.09 |
Unity :: Unity 입력처리, InputManager vs InputSystem (0) | 2024.10.07 |
Unity :: 충돌 처리,OnCollison~() , OnTrigger~()의 인자값 차이 (0) | 2024.10.07 |