
OverlapSphere를 통해 오브젝트를 탐색하고 있던중 다음과 같은 경고문이 나왔다.
Compared to 'OverlapSphere', 'OverlapSphereNonAlloc' is not allocating memory.
이는 OverlapSphere가 매번 새로운 배열을 생성하기에 가비지 컬렉션을 쌓일 수 있어
Update문에 사용할시 나오는 오류문이다.
그렇기에 OverlapSphereNonAlloc로 바꿀것을 추천한다고한다.
Collider[] hits = Physics.OverlapSphere(position, radius);
Physics.OverlapSphere는 해당 위치로부터 일정 반경안에 있는 충돌체의 리스트를 반환한다.
그렇기에 Update문에서 사용시 매번 새로운 배열을 만들기에 가비지 컬렉션이 쌓일 위험이 있고
이는 프레임 드랍을 유발할 수 있다.
Collider[] results = new Collider[5]; // 전역변수로 미리 만들어둔 배열
int count = Physics.OverlapSphereNonAlloc(position, radius, results);
Physics.OverlapSphereNonAlloc는 똑같이 일정 반경의 충돌체를 검사하지만 Physics.OverlapSphere()와는 다르게,
새로운 배열을 생성하지 않고, 이미 만든 배열(results)에 결과를 넣는다.
그렇기에 갈비지 컬렉션의 위험이 없어 Update와 FixedUpdate에 써도 안전하다.
주의할점으로는 미리 만들어준 results의 길이만큼만 저장하기에 그 수를 넘는 것은 무시된다.
참고 : https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Physics.OverlapSphereNonAlloc.html