Programing/Unity(C#)

[Unity] 특정 방향으로 2D 오브젝트 회전시키기

hye3193 2024. 4. 6. 01:57
Vector2 dir;
transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg);

* 유니티는 회전 각도를 나타날 때 쿼터니언을 사용하기 때문에 Vector3가 아니라 Quaternion.Euler를 사용해야 한다. (짐벌락 현상을 방지하기 위함)

 

2D상에서의 회전은 Z축을 회전시키면 되기 때문에 x와 y의 값은 0으로 고정시켜 둔다

 

Mathf의 Atan2는 아크탄젠트 함수(역삼각함수)로, y와 x를 가지고 사잇각을 구할 수 있다

* Atan과 Atan2함수가 있는데, Atan 함수는 인자로 float값(y/x)를 받고, Atan2 함수는 인자로 y값과 x값을 각각 받는다. 따라서 Atan 함수는 만약 x가 0일 경우, y/x 연산 자체가 수행이 안 되어 에러가 날 수 있으나 Atan2 함수는 0으로 나누는 연산이 없기에 안정성이 더 높다

 

Atan2를 이용해 구한 값은 라디안 값이기 때문에 여기에 Mathf.Rad2Deg(360 / PI * 2)를 곱해주어 우리가 흔히 아는 360도 각도로 변환시켜 준다

 

rotation의 값을 해당 값으로 변경해주면 완료!