Cast vs Overlap

감사콩·2026년 1월 22일

유니티

목록 보기
28/29

서론

주둔지 경비병의 Player 감지 로직을 만들다 문득 궁금증이 생겼다.
Physics.Raycast 같은 Cast 계열이 존재하고
Physics.OverlapSphere 같은 Overlap 계열이 있는데
둘의 명확한 차이가 뭔지 궁금해졌다.

이번 포스팅에선 질문과 검색을 통해 정리한 두 방식의 작동 원리 차이를 정리해보겠다.
추가로 내 프로젝트(소음 탐지)에선 오버랩을 쓴 이유도.



Physics.Cast 계열


Raycast, SphereCast, BoxCast 등이 존재

1. 작동 원리

  • 특정 지점에서 방향을 가지고 선 혹은 도형을 발사.

2. 반환 데이터

  • 단순한 충돌 여부뿐만 아니라 RaycastHit 구조체를 통해 상세한 정보를 반환.
    • 충돌 좌표(point)
    • 충돌 표면의 각도/법선 벡터(normal)
    • 발사 지점과의 거리

3. 비용

  • 충돌 지점을 정확히 역산해야 하므로 연산 비용이 상대적으로 높음.

4. 용도

  • 총알 피격 판정, 시야 체크, 마우스 클릭 지점 감지 등 정확한 타격점이 필요할 경우.



Physics.Overlap 계열


OverlapSphere, OverlapBox 등이 존재

1. 작동 원리

  • 특정 위치에 가상의 도형(구, 상자 등)을 생성하고, 그 부피 안에 겹치는 콜라이더를 찾아내는 방식.

2. 반환 데이터

  • Collider[] 배열을 반환.
  • 누가 이 범위 안에 존재하는가? 만 알려줄 뿐, 정확히 어느 면에 어떻게 닿았는 지는 계산 X.

3. 비용

  • 물리 엔진의 광역 단계를 활용해 겹침만 판단하므로
    Cast 계열보다 연산 비용이 매우 저렴(광역 단계에 대한 설명은 아래에)

4. 용도

  • 폭발 데미지 범위, 광역 버프/디버프, 아이템 습득 범위, 소음/냄새 감지.



프로젝트 반영


이번에 구현하려는 기능은 플레이어 에게서 발생하는 소음
주둔지 경비병이 듣고 추적하는 기능. 나는 OverlapSphereNonAlloc를 선택

선택 이유 1: 소리의 성질

소리는 공기 중으로 퍼져나가는 파동이다.
OverlapSphere는 구체 형태의 감지 영역을 생성하므로 소리의 성질과 일치한다고 생각.

선택 이유 2: 데이터의 목적

"소리가 가드 귓바퀴에 32도 각도로 닿았다"
이런 정밀한 정보는 필요 없다.

단지 내 영역 안에 소음원이 존재하는가? 만 알면 된다.
따라서 값비싼 RaycastHit 정보가 필요 없음.

선택 이유 3: 최적화

프렉쳐 시스템을 사용하는 게임 특성상 주변에 파편이 수백 개가 굴러다닐 수 있다.
이때 OverlapSphere의 오버로드를 최적화에 활용.

LayerMask: GarrisonGuard 레이어만 검출하도록 설정하여, 수백 개의 파편은 물리 연산에서 배제.
NonAlloc: Physics.OverlapSphereNonAlloc을 사용하여 GC 발생을 감소시킴.


예시 코드

//최적화 예시
private Collider[] noiseBuffer = new Collider[10];

public void EmitNoise(float radius)
{
    //LayerMask로 경비병만 거르고 NonAlloc으로 메모리 할당 방지
    int count = Physics.OverlapSphereNonAlloc(transform.position, radius, noiseBuffer, guardLayer);
    
    for (int i = 0; i < count; i++)
    {
        //소음 전달
    }
}

이런 식으로 구현!



광역 단계란?


마지막으로 아까 적어둔 광역 단계
Broad-phase 개념만 알아보고 마쳐보자.

물리 엔진이 충돌을 계산할 때, 맵에 있는 모든 물체끼리 1:1로 비교하면 연산량이 너무 커짐.
그래서 근처에 있는 객체끼리만 그룹 짓는 단계를 먼저 거치는데
이걸 광역 단계 = Broad-phase라고 함.

따라서 Overlap은 이 단계에서 "이 구역에 누가 있냐" 정도만 묻고 끝내기 때문에 저렴한 거고
Cast는 정확한 표면을 찾기 위해 그 다음 단계인 협역 단계(Narrow-phase) 가야 하므로 비쌈.

나중에 시간되면 이 단계 자체의 라이프사이클 관해서도 알아보자.



마무리


정확한 타격과 좌표가 중요하다면? -> Cast
범위 내 존재 여부만 중요하다면? -> Overlap

데이터의 목적에 맞는 도구를 선택하는 연습을 통해, 최적화까지 챙겨가며 코딩해보자.

profile
안녕하시와요

0개의 댓글