Unity - 각도 구하기
2024. 5. 16. 19:57ㆍUnity/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 |