⚔️ 게임 충돌 판정 알고리즘 완전 정리 – AABB, Circle, Polygon

 게임에서 캐릭터가 벽에 막히거나, 총알이 적에게 맞는 장면을 구현하려면 **충돌 판정(Collision Detection)**이 필수다.

이번 글에서는 게임에서 가장 많이 쓰이는 AABB, 원(Circle), 다각형(Polygon) 충돌 판정을 이론과 Unity 예제까지 포함해 정리해보자.


1. AABB(축 정렬 사각형, Axis-Aligned Bounding Box)

  • 가장 간단하고 빠른 충돌 판정 방법

  • 사각형의 변이 좌표축(X, Y)에 평행하게 정렬되어 있어야 함

  • 계산: 두 사각형의 좌표가 겹치는지 확인

예시 (2D Unity)

bool IsCollidingAABB(Rect a, Rect b) { return a.xMin < b.xMax && a.xMax > b.xMin && a.yMin < b.yMax && a.yMax > b.yMin; }

→ 빠르고 단순하지만, 회전된 오브젝트에는 부정확


2. Circle 충돌

  • 중심점과 반지름만으로 충돌 판정

  • 계산: 두 원 사이의 거리 < 반지름 합

예시 (Unity)

bool IsCollidingCircle(Vector2 centerA, float radiusA, Vector2 centerB, float radiusB) { return Vector2.Distance(centerA, centerB) < (radiusA + radiusB); }

→ 원형 오브젝트나 구형 캐릭터에 적합


3. Polygon 충돌

  • 다각형 오브젝트 충돌 판정

  • 일반적으로 Separating Axis Theorem (SAT) 사용

  • 계산: 모든 변을 기준으로 투영했을 때 겹치지 않으면 충돌 없음

💡 TIP: 다각형 충돌은 계산량이 많으므로, 복잡한 오브젝트는 AABB/원으로 1차 필터링 후 Polygon 사용


4. Unity에서 활용하기

  • Unity는 Collider(2D/3D)를 제공

    • BoxCollider2D → AABB

    • CircleCollider2D → Circle

    • PolygonCollider2D → Polygon

  • Rigidbody + Collider 조합 → 물리 엔진이 자동으로 충돌 처리

  • 하지만 직접 알고리즘 이해 → 최적화 + 커스텀 충돌 가능

void OnCollisionEnter2D(Collision2D collision) { Debug.Log(collision.gameObject.name + "와 충돌!"); }

5. 마무리

충돌 판정 알고리즘을 이해하면,

  • 캐릭터 이동과 벽 충돌 처리

  • 총알과 적 충돌

  • 물리 기반 오브젝트 상호작용

등 게임의 기본적인 물리적 상호작용을 자유롭게 구현할 수 있다.

👉 다음 글에서는 벡터(Vector)와 행렬(Matrix)로 이해하는 캐릭터 이동을 다뤄서, 움직임 계산의 핵심 원리를 살펴보겠다.

댓글

이 블로그의 인기 게시물

🚀 멀티플레이어 게임 최적화와 성능 튜닝 – 부드러운 게임 플레이 구현

⚔️ 멀티플레이어 스킬/아이템 동기화 – 실시간 전투 구현

🎬 멀티플레이어 리플레이 시스템 구현 – 게임 플레이 녹화와 재생