나는 어떤 구역안에 오브젝트가 들어가야할 때 여태까지는 Collider 혹은 Distance를 써서 해결해왔다.
하지만 두 방법 모두 치명적인 단점이 있는데,
Collider
1. 코드가 더럽다.
2. Collider로 구역을 가두리를 해줘야하기 때문에 불필요한 Collider를 많이 만들어야 한다.
3. 정육각형 이외의 범위의 경우 사용하기 힘들다.
Distance
1. 원형 범위 이외의 범위는 사용이 힘들다. (특히 모서리 부분)
위와 같은 이유로 하나의 Collider로 이 Collider 안에 완전히 오브젝트가 들어왔는지 확인하는 코드를 짜고 싶었다.
구글링 결과 Collider의 Bounds를 이용하여 해결이 가능했다.
Bounds에 대한 API는 아래와 같다.
코드는 심플하다.
private void OnTriggerStay(Collider other)
{
if (other.CompareTag(targetTag) && this.GetComponent<Collider>().bounds.Contains(other.bounds.min)
&& this.GetComponent<Collider>().bounds.Contains(other.bounds.max))
print("Bus In Collider");
else
print("X");
}
해당 코드는 목표지점이 되는 Collider에 첨부되었다.
ColliderEvent라는 Script안에 짜여진 코드로 Tag를 통해 내가 원하는 오브젝트인지 판별하고,
해당 오브젝트의 Bounds가 범위 안에 들어온다면 포함하고 있다고 인식하는 프로세스이다.
참고로 해당 방법은 완벽하게 인식하는 것이 아닌 Collider의 시작점과 끝점의 좌표를 통해 계산하는 것으로 Collider가 복잡하게 생긴 경우 매끄럽게 작동하지 않을 수 있다.
그래도 Collider를 덕지덕지 만들지 않아도 된다는 것에 만족.
설명을 잘 못하는데, 아무래도 내가 나중에 알아보기만 하면 된다는 마인드로 작성해서 그런거 같다.
나중에 또 못한다고 검색하지말고 자신의 블로그를 봐라.
'개발이야기' 카테고리의 다른 글
[Unity] TMPro를 이용해 Text에서 Icon을 사용해보자 (0) | 2022.04.26 |
---|---|
[Unity] 아틀라스(Atlas) 된 이미지를 Slice하는 방법 (0) | 2022.04.26 |
[Unity] Scroll View 내용에 맞게 크기 조절하기 (0) | 2021.07.14 |
[Unity] Hinge Joint의 표기오류 (0) | 2021.06.06 |
[Unity] 화면에 맞게 UI와 Sprite 크기 조절하기 (0) | 2020.12.30 |