내적을 이용하여 Acos으로 각도구하는 법도 있고 ( 0~ 180도)
Atan를 이용하여 각도를 구하는 법도 있지만 (-180 ~ 180도)
1 2 3 4 5 | public static float GetAngle(Vector3 from, Vector3 to) { Vector3 v = to - from; return Mathf.Atan2(v.y, v.x) * Mathf.Rad2Deg; } | cs |
0 ~ 360도로 구하기 위해서는 작업을 거쳐야하는데
Quaternion.FromToRotation 함수를 이용하면 0~360도 값을 바로 얻을 수 있다.
1 2 3 4 | public static float CalculateAngle(Vector3 from, Vector3 to) { return Quaternion.FromToRotation(Vector3.up, to - from).eulerAngles.z; } | cs |
(https://gist.github.com/shiwano/0f236469cd2ce2f4f585)
다른 방법으로는 Vector3.SignedAngle이 있다. (-180 ~ 180도)
1 | float angle = Vector3.SignedAngle(transform.up, endPos - startPos, -transform.forward); | cs |
Axis는 transform.forward, -transform.forward로 시계, 반시계 방향을 정할 수 있다.
'프로그래밍 공부 > Unity 팁' 카테고리의 다른 글
유니티 커스텀에디터 사용하기(인스펙터 컴포넌트 수정) (0) | 2018.11.21 |
---|---|
MVC(Model-View-Controller) 패턴. 유니티 커스텀 (0) | 2018.11.20 |
유니티 스크립트 최적화 코드 작성법 (0) | 2018.09.12 |
오브젝트풀링 편하게 하기 (0) | 2018.06.21 |
싱글톤 쉽게 만들기 (0) | 2018.06.21 |