프로젝트 일지/Unity

[Unity/TIL] 2D 게임에서 특정 오브젝트 바라보도록 회전시키기

톰마토 2025. 4. 23. 22:31
728x90

타워가 발사하는 발사체가 타겟을 계속 쫓아가게(유도탄처럼) 만들었다. 그런데 어떤 발사체에 애니메이션을 넣고 보니 애니메이션에 방향이 있어서 방향도 회전시켜줘야 한다!! 

 

3D였다면 transform.LookAt()이나 Quaternion.LookRotation()를 사용했을 것 같다. 근데 이 함수들은 2D에서는 안됨!!! 내가 알아서 Z축 회전을 해줘야 한다. (2D Sprite는 XY 평면에서 돌아가므로, Z축 회전을 계산해야 함.)

 

우선 발사체가 기존에 바라보던 방향에서 얼만큼 회전해서 타겟을 바라봐야하는지를 알아야 한다. 먼저 발사체가 향해야 할 방향 벡터를 구하고, 이 벡터가 원점 기준으로 만드는 각도를 Mathf.Atan2()로 계산한다. 두 벡터 사이각을 구할 때는 아크탄젠트를 쓰면 된다. 

 

tanθ = 높이 / 밑변 이니까, tan의 역함수인 아크탄젠트를 이용하면 두 벡터를 알 때 그 사이 각도를 구할 수 있는 것을 활용하면 된다.

아크탄젠트로 각도 알 수 있음

유니티에서 Mathf.Atan2(y, x) 함수를 사용하면 방향 벡터 (x, y)가 만드는 각도를 계산할 수 있다. -π ~ +π 범위의 라디안을 반환해준다. 그래서 여기서 Mathf.Rad2Deg를 곱해야 Degree가 된다. 

 

각도 구해서 회전 적용시키는 코드

Vector3 dir = targetTransform.position - transform.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, angle);
728x90