OverLap Function

Physics.OverlapSphere

  • 구조: 중심 위치와 반지름을 기반으로 하는 구
  • 리소스 사용 순서: 일반적인 사용 순서 중 상대적으로 높음

Physics.OverlapBox

  • 구조: 중심 위치와 크기를 기반으로 하는 상자
  • 리소스 사용 순서: 일반적인 사용 순서 중 중간

Physics.OverlapCapsule

  • 구조: 두 점과 반지름을 기반으로 하는 캡슐
  • 리소스 사용 순서: 일반적인 사용 순서 중 중간

Physics.OverlapMesh

  • 구조: 메쉬와 메쉬의 변형을 기반으로 함
  • 리소스 사용 순서: 상대적으로 높음, 메쉬의 복잡도에 따라 다를 수 있음

NonAlloc 함수

  • Unity는 NonAlloc 버전의 Overlap 함수도 제공합니다.
  • 예를 들면 Physics.OverlapSphereNonAlloc, Physics.OverlapBoxNonAlloc 등이 있습니다.
  • NonAlloc 버전의 함수들은 기본 Overlap 함수와 비슷하게 작동
  • 새로운 메모리 할당을 피하기 위해 기존 배열을 재사용합니다.
  • 이로 인해 가비지 컬렉터(Garbage Collector)에 의한 프레임 드롭을 줄일 수 있습니다.

일반적인 Overlap 함수는 호출될 때마다 새로운 Collider 배열을 반환하기 때문에 자주 호출되는 상황에서는 가비지 생성이 많아질 수 있습니다. 반면, NonAlloc 버전은 미리 할당된 배열을 인자로 받아, 해당 배열에 결과를 채워 넣습니다.

예제:

Collider[] results = new Collider[10];
int numColliders = Physics.OverlapSphereNonAlloc(transform.position, 5.0f, results);

위 코드에서 results 배열은 미리 할당되어 있고, OverlapSphereNonAlloc 함수는 이 배열에 결과를 채워 넣습니다. numColliders는 실제로 감지된 Collider의 수를 나타냅니다.

NonAlloc 함수들을 사용할 때, 배열의 크기가 충분히 크지 않으면 모든 결과를 가져오지 못할 수도 있으므로, 배열의 크기와 반환된 Collider의 수를 항상 확인해야 합니다.