Unity/기능

[Unity] 2D - Mathf.Atan2를 이용한 Rotate 계산

turbulence93 2025. 5. 1. 23:30

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를 뒤집어 주면 회전 값을 구할 수 있다.
  • 여기서 조금 더 나아가면 마우스 방향의 각도를 정확하게 계산하고 있기 때문에 발사체를 구현할 수 있다.

'Unity > 기능' 카테고리의 다른 글

[Unity] BoxCast로 히트 박스 제작하기  (1) 2025.05.02
[Unity] const, readlony, static readonly  (1) 2025.05.01
[Unity] Camera  (1) 2025.04.30
[Unity] Pixel per Unit(PPU)  (1) 2025.04.29
[Unity] 알고리즘 - 동적 계획법  (0) 2025.04.21