본문 바로가기

코딩 공부/Unity C#

while을 사용하여 충돌 없이 스폰

무작위 위치에서 생성되고, 랜덤하게 통통튀는 테디베어 20개 이하로 스폰하는 프로그램

클램핑 코드 참고

- 오브젝트가 너무 많이 스폰돼서 충돌이 되지 않는 장소를 못 찾고, while문의 무한 반복이 발생하는 일을 방지하기 위해 최대 스폰 개수를 20개로 제한한다

- 콜라이더의 길이는 Start 메서드에서 한 번 정의하여 전체 코드에서 사용할 수 있도록 한다

- 벡터의 최솟값 · 최댓값을 설정하여 특정 스폰 위치가 정해졌을 때 충돌되지 않는지 확인한다

- 박스 콜라이더의 길이를 구하기 위한 코드이다.

- GetComponent로 컴포넌트를 가져온 후, 길이를 설정한다

- 오브젝트는 길이 설정용으로만 사용할 것이기 때문에 바로 파괴한다

 

- while문에 있는 조건문으로 오브젝트가 있는 위치가  충돌이 없는 곳인지 확인한다

- 추후 콜라이더의 크기를 누군가 변경할 수도 있고, 수정하지 않아도 문제없기 때문에 콜라이더를 하드코딩하지 않았다

Physics2D.OverlapArea (충돌 감지 함수)
: 2D 공간에서 두 점으로 정의된 사각형 영역 내에 있는 모든 Collider2D 오브젝트들을 탐지
// 사용예시
Collider2D[] colliders = Physics2D.OverlapArea(pointA, pointB);​

pointA와 pointB: 사각형 영역의 대각선 끝점(두 꼭짓점). 영역 안에 있는 모든 Collider2D 객체의 배열을 반환
- 충돌하게 될 오브젝트의 콜라이더 반환

- 충돌 부분이 없는지 다시 확인 후 인스턴스 생성 및 스프라이트 설정