Mathf.Atan2(y, x)와 회전 각도 계산
- Mathf.Atan2(y, x)는 벡터가 x축과 이루는 각도를 라디안 값으로 반환하며, 범위는 -π ~ π (즉, -180° ~ 180°).
- 이 값을 Mathf.Rad2Deg를 곱하면 도(degree) 단위가 되어 직관적인 각도 처리 가능.
- 예시:
- (1, 0) → 0°
- (0, 1) → 90°
- (-1, 0) → 180°
- (0, -1) → -90°
Atan 예시
- 3,4 사분면은 각도가 더 커지는게 아니라 음수로 내려가게 된다. 그래서 270°가 아니라 -90°가 되는것이다.
- 위 특징을 이용하여 2D 프로젝트에서 마우스 위치를 기반으로 회전을 구현할 수 있다.
//마우스 위치로 방향 계산하기
Vector2 mousePosition = Input.mousePosition;
Vector2 worldPos = camera.ScreenToWorldPoint(mousePosition);
lookDirection = (worldPos - (Vector2)transform.position);
//마우스 위치를 방향으로 회전 처리하기
float Z = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
bool isLeft = Mathf.Abs(Z) > 90f;
characterRenderer.flipX = isLeft;
- 마우스 방향을 direction으로 가지는 Atan2를 처리해서 기준이 되는 오브젝트의 마우스 방향을 처리 할 수 있다.
- 2사분면(90°~180°)과 3사분면(-180°~-90°)은 왼쪽임을 확인할 수 있다.
- 이를 절대값으로 나타내면 결국 90°~180°는 왼쪽을 나타내게 된다.
- 그 후 isLeft를 통해 좌우 체크 후 마우스 방향에 맞춰 characterReneder를 뒤집어 주면 회전 값을 구할 수 있다.
- 여기서 조금 더 나아가면 마우스 방향의 각도를 정확하게 계산하고 있기 때문에 발사체를 구현할 수 있다.