(유니티) 회전(rotation)과 쿼터니언

게임 오브젝트를 코드에서 회전시키기 위해 new Vector3();를 사용하면 에러가 난다. Vector3 형식을 Quaternion 형식으로 변환할 수 없다.라는 문구가 뜨는데 위치와 달리 회전은 쿼터니언(Quaternion)을 사용한다.

Quaternion.Euler함수를 사용하면 Vector3를 쿼터니언으로 쉽게 변환할 수 있다.

쿼터니언은 x,y,z,w 4개의 축을 사용하여 Vector3를 사용했을 때 생기는 짐벌락 현상을 방지한다.

짐벌락 현상이란 오브젝트가 회전을 하면 회전하는 오브젝트 기준으로는 공간 좌표도 회전하게 된다. 쉽게 생각하면 캐릭터가 움직일때마다 가로 세로 기준이 바뀌는 것을 생각하면 된다.

여기서 프로그램상 문제가 생기는데 위 두 사진을 보면 똑같은 오브젝트인데 하나는 그대로 있는 것이고 하나는 y축 기준으로 90도 회전한 것이다. 이 오브젝트가 한 자리에 가만히 있었다면 x축과 z축이 겹치게 된다. 그러면 컴퓨터는 x축과 z축을 구별하지 못하게 된다. 대충 설명한 것이지만 이게 짐벌락 현상이다.

쓸모있는 유니티 Qutarnion 함수들


Quternion.LookRotaion(Vector3 forward, Vector3 upwards);

해당 방향으로 쳐다보는 함수.

위 코드처럼 target 게임 오브젝트를 받고 캐릭터가 target을 향하는 방향을 구해서 넣어주면 캐릭터가 target을 바라보도록 할 수 있다.

Quaternion.Lerp(Quaternion a, Quaternion b, float t);

중간 값을 구할 수 있다의 의미는 두 게임 오브젝트 사잇값들 중에서 50%면 중간, 0%면 aRotation 방향, .. 이런식으로 회전할 수 있다는 의미이다.

즉, 이런식으로 지정하면 30과 60의 50%니까

45도를 회전하였다.

Quaternion.eulerAngles;

게임 오브젝트의 회전을 벡터3로 사용해야 할때 유용한 함수이다.

두 쿼터니언을 곱하면 값이 더해진다.

위 코드를 풀이했을 때 당연히 게임 오브젝트의 x축은 75도 회전한다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다