Atan( 아크탄젠트 )
유니티에서 오브젝트를 회전 시킬 때 아크탄젠트라는 개념이 필요합니다.
탄젠트의 역함수이며 좌표평면에서 x,y값으로 각도를 구하기 위해 사용합니다.
angle = Mathf.Atan2(vertical, horizontal) * Mathf.Rad2Deg; // 순서 변경
transform.rotation = Quaternion.Euler(0, angle, 0);
인자로 넣은 vertical과 horizontal은 유저가 입력한 방향에 관한 정보 입니다.
인자는 y,x순으로 넣으면 됩니다.
vertical 값이 0.7이고, horizontal 값이 0.8이라면
0.7/0.8이 됩니다
이를 계산 해보면 약 0.875라디안 이라는 값이 나오는데 이를 "도"로 변환하면 39.8도가 됩니다.
좌표평면에서 시작점부터 39.8도 회전 한다면 대략 반시계 방향으로 1사분면의 절반에 살짝 못미치는 정도가 됩니다.
호도법
Atan 함수로 계산한 값이 라디안으로 나오는 이유는 호도법 때문입니다.
오래전부터 각도는 숫자로 표현하기가 참 애매했다고 합니다.
예를들어 숫자 90과 각도 90도 이 둘을 어떤식으로 계산을 해야할지 마땅한 기준이 없었습니다.
그래서 오래전 수학자들은 라디안이라는 단위를 만들었습니다.
라디안은 호의 길이가 반지름과 같게 되는 각을 의미합니다.
반지름이 10이라면 호의 길이도 10이고 이때의 각도가 1라디안 입니다.
1라디안은 정확히 57.2958라고 합니다.
라디안은 절대적인 각도이므로 계산할 기준이 생긴 것 입니다.
유니티에서도 이런 호도법을 사용해 결과 값을 라디안으로 주는 것이고 이를 다시 오브젝트에 적용하기 위해 "도"로 변환하는 것 입니다.
유니티에서 라디안을 "도"로 변환하려면 57.29578을 곱해주면 됩니다. ( Mathf.Rad2Deg )
위 예시에서 Atan의 결과가 대략 0.6947인데 여기에 57.29578을 곱해주면 대략 39.8도가 됩니다.
57.29578은 직접 쓰기에는 오타 가능성도 있어서 Mathf.Rad2Deg라는 상수값으로 유니티에서 미리 지정 해두었습니다.