[Unity] OverlapBox, OverlapColliders

jh Seo·2025년 6월 14일
0

유니티

목록 보기
67/67

OverlapBox

Collider2D 하나 반환하는 형태

public static Collider2D OverlapBox
(
    Vector2 point, 
    Vector2 size, 
    float angle, 
    int layerMask = DefaultRaycastLayers, 
    float minDepth = -Mathf.Infinity, 
    float maxDepth = Mathf.Infinity
);

반환

인자로 넣어준 박스 범위 내에 Collider2D가 존재하면 해당 Collider를 반환한다.

만약 해당 영역에 Collider가 없으면 null을 반환한다.

특징

  • 2D에서는 Z축이 렌더링이나 충돌에 직접적인 영향을 주지 않지만, minDepth와 maxDepth를 활용해 Z 좌표를 기준으로 객체를 필터링할 수 있다.

  • OverlapBox 내부에 여러 Collider가 포함될 경우, 가장 낮은 Z 좌표를 가진 Collider가 반환된다.

Collider2D[]을 인자로 받는 형태

public static int OverlapBox
(
    Vector2 point, 
    Vector2 size, 
    float angle, 
    ContactFilter2D contactFilter, 
    Collider2D[] results
);

반환

Overlap된 Collider들의 개수를 반환한다.

배열의 크기만큼 Collider를 탐색하여 반환하며, 배열 크기보다 많은 Collider가 있어도 추가 탐색은 진행되지 않는다.

특징

  • ContactFilter2D를 통해 필터링이 가능하다. (ZDepth, Trigger, LayerMask 등)

  • 배열 크기보다 많은 Collider가 존재하더라도, 최대 배열 크기까지만 저장된다.

  • 만약 크기 0인 배열을 넘겨주면 아무 결과도 반환되지 않는다!

List<Collider2D>을 인자로 받는 형태

public static int OverlapBox
(
    Vector2 point, 
    Vector2 size, 
    float angle, 
    ContactFilter2D contactFilter, 
    List<Collider2D> results
);

반환

Overlap된 Collider들의 개수를 반환한다.

특징

  • List<Collider2D>를 인자로 받으므로, 저장할 공간이 부족하면 자동으로 리스트 크기가 조정된다.

  • 불필요한 메모리 할당을 방지하고, 자주 실행되는 쿼리의 경우 가비지 컬렉션(GC) 성능을 향상시킨다.

  • 비어 있는 List<Collider2D>를 넘겨줘도 자동으로 크기를 조정하여 결과를 저장할 수 있다.

OverlapCollider

ContactFilter2D를 인자로 받지 않는 형태

public static int OverlapCollider(Collider2D collider, List<Collider2D> results);

반환

인자로 넘겨준 Collider2D와 충돌한 모든 Collider의 개수를 반환한다.

특징

  • 인자로 넘겨준 List<Collider2D>에 닿은 모든 Collider를 추가한다.

  • List<Collider2D>가 부족하면 자동으로 크기를 조절하여 결과를 저장한다.

ContactFilter2D를 인자로 받는 형태 - List<Collider2D> 사용

public static int OverlapCollider
(
    Collider2D collider, 
    ContactFilter2D contactFilter, 
    List<Collider2D> results
);

반환

필터링된 Overlap된 Collider들의 개수를 반환한다.

특징

  • ContactFilter2D를 사용해 LayerMask, Trigger 설정, Depth 필터링 등 다양한 조건을 추가할 수 있다.

  • List<Collider2D>가 부족하면 자동으로 크기를 조정하여 결과를 저장한다.

ContactFilter2D를 인자로 받는 형태 - Collider2D[] 사용

public static int OverlapCollider
(
    Collider2D collider, 
    ContactFilter2D contactFilter, 
    Collider2D[] results
);

반환

필터링된 Overlap된 Collider들의 개수를 반환한다.

특징

  • ContactFilter2D를 활용하여 레이어, 트리거 여부, 깊이 필터링이 가능하다.

  • Collider2D[]을 인자로 받으므로, 배열 크기보다 많은 Collider가 존재하더라도,
    최대 배열 크기까지만 저장된다.

  • 배열의 크기가 너무 작으면 일부 결과가 저장되지 않으므로,
    적절한 크기로 설정하는 것이 중요하다.

주의사항

overlapcollider함수는 Active 상태의 collider을 사용해야한다.
deactivate상태거나 onenabled가 꺼져있는 collider로 overlap을 사용하면 제대로 감지가 안 된다!

또한 이건 했던 실수인데 collider의 bound.size값 받아와서 overlapbox함수를 사용하려했다.
문제는 collider가 꺼져있다면 bound.size값 0으로 받아와진다..

profile
코딩 창고!

0개의 댓글