Unity - 각도 구하기

2024. 5. 16. 19:57Unity/Unity 학습정리

Unity에서 회전과 관련된 연산을 할 때 두 점 사이의 각도를 알아야 할 순간이 있다. 두 점은 두 개의 벡터로 표현이 가능하고, 두 개의 벡터가 원점에서 출발한다고 생각했을 때 삼각함수를 이용하면 각도를 구할 수 있다. 

 

 



탄젠트와 아크탄젠트

탄젠트는 직각삼각형이 있을때 tanΘ = a/b 로 표현 할 수 있다. 이 말은 각도를 알면 밑변과 높이의 비율을 알 수 있다.

tan 45º = 1 와 같이 각도가 45º라면 밑변과 높이의 비가 1:1이라는 얘기이다.

 

그러면 우리는 벡터의 밑변과 높이 (x,y)만 알게된다면 역으로 각도를 구할 수 있게 된다. 이를 아크탄젠트라고 하는데 유니티에서는 아크탄젠트를 지원해주는 함수 Atan2(float y, float x)가 존재한다.

해당 함수는 라디안 (- π, π) 으로 반환하고 우리가 알고 있는 각도(degree)로 변환하고 싶다면 라디안값에 * Mathf.Rad2Deg 를 해주면 최종적으로 float 자료형인 각도가 반환되게 된다.

 

유니티에서는 두 점을 두 개의 벡터를 이용해 표현할 수 있다. 2차원 벡터라고 생각하고 위 그림의 A점이 좌표평면의 원점이라고 생각해보자.

 

Vector2 start, Vector2 end

두 개의 벡터를 빼서 Start에서 End로 향하는 벡터를 만들고 해당 벡터를 원점에 가져와 탄젠트를 이용해 각도를 계산해내는 것이다. 이를 코드로 표현하면 다음과 같다.

float GetDegree(Vector2 start, Vector2 end)
{
	Vector2 v = end - start //start에서 end로 향하는 벡터
    float angle = Mathf.Atan2(v.y,v.x) * Mathf.Rad2Deg;
}

 

 

 

 

 

 

 

 

'Unity > Unity 학습정리' 카테고리의 다른 글

Unity - 싱글톤 패턴  (0) 2024.05.21
Unity - Vector2.Dot으로 시야각 구하기  (0) 2024.05.17
Unity - LayerMask  (0) 2024.05.09
Unity - Coroutine2  (0) 2024.04.22
Unity - Coroutine  (1) 2024.04.19