Unity/Tip

콜라이더 충돌 검사 : Physics.Overlap vs NonAlloc

코샵 2024. 1. 5. 10:36
반응형

Unity의 Physics.Overlap[콜라이더이름] 메서드는 지정된 영역 내에서 콜라이더와 충돌하는 GameObject를 찾는 데 사용되는 메서드입니다. 이 메서드는 다음과 같은 두 가지 버전이 있습니다.

  • 일반 버전: 이 버전은 충돌하는 GameObject의 배열을 반환합니다.
  • NonAlloc 버전: 이 버전은 충돌하는 GameObject의 참조를 반환합니다.

OverlapSphere() VS OverlapSphereNonAlloc() 

  Physics.OverlapSphere() Physics.OverlapSphereNonAlloc()
메모리 사용량 새로운 배열을 할당하여 결과를 반환 기존 배열을 사용하여 결과를 반환
성능 메모리 할당 해제 과정이 추가되어 성능이 저하될 있음 메모리 할당 해제 과정이 없기 때문에 성능이 향상될 있음
사용법 새로운 배열을 생성하여 결과를 저장해야 기존 배열을 사용하여 결과를 저장할 있음

Physics.OverlapSphere() 메서드는 지정된 반경 내의 충돌하는 오브젝트의 목록을 반환합니다. 이 메서드는 결과를 저장하기 위해 새로운 배열을 할당합니다. 따라서 메모리 사용량이 증가하고 성능이 저하될 수 있습니다.

 

Physics.OverlapSphereNonAlloc() 메서드는 지정된 반경 내의 충돌하는 오브젝트의 목록을 반환합니다. 이 메서드는 결과를 저장하기 위해 기존 배열을 사용합니다. 따라서 메모리 사용량이 감소하고 성능이 향상될 수 있습니다.

 

다음은 두 메서드의 사용 예입니다.

// Physics.OverlapSphere() 메서드 사용 예
int numColliders = Physics.OverlapSphere(position, radius);
Collider[] colliders = new Collider[numColliders];
Physics.OverlapSphere(position, radius, colliders);

// Physics.OverlapSphereNonAlloc() 메서드 사용 예
Collider[] colliders = new Collider[10];
int numColliders = Physics.OverlapSphereNonAlloc(position, radius, colliders);

첫 번째 예에서는 Physics.OverlapSphere() 메서드를 사용하여 새로운 배열을 생성하고, 그 배열에 결과를 저장합니다. 두 번째 예에서는 Physics.OverlapSphereNonAlloc() 메서드를 사용하여 기존 배열을 사용하여 결과를 저장합니다.

 

일반적으로 Physics.OverlapSphereNonAlloc() 메서드를 사용하는 것이 효율적입니다. 하지만 기존에 할당된 배열이 없다면 Physics.OverlapSphere() 메서드를 사용해야 합니다.