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() 메서드를 사용해야 합니다.