본 내용은 필자가 공부한 내용을 정리한 것으로 틀리거나 잘못된 내용이 있을 수 있습니다.
콜라이더는 유니티에서 가장 많이 쓰이는 것 중 하나로, 충돌을 감지할 때 쓰입니다.
3D에서는 Box Collider, Sphere Collider, Capsule Collider,
2D에서는 Box Collider2D와 Circle Collider2D가 대표적으로 쓰입니다.
콜라이더의 형태가 간단할수록 기기에 부하를 주지 않습니다.
위 그림은 콜라이더가 충돌을 감지하는 영역을 나타냅니다.
콜라이더의 요소
1. Box Collider
isTrigger은 나중에 설명할 예정이니 지금은 무시합시다.
Material은 물체 표면의 물리적 특성을 나타냅니다. 물체 표면의 마찰계수, 탄성계수, 정지마찰력 등을 설정할 수 있습니다. 물리 머터리얼을 따로 만들어 넣습니다.
Center은 콜라이더의 위치를 의미합니다. 게임 오브젝트의 로컬좌표를 기준으로 합니다.
Size는 충돌 판정 영역의 크기를 의미합니다. 이 역시 부모의 크기를 기준으로 합니다.
2. Capsule Collider
Center까지는 박스 콜라이더와 동일합니다.
Radius는 캡슐의 반지름을 의미합니다. 이 값이 Height보다 클 경우 그냥 구체가 되어버립니다.
Height는 콜라이더의 크기를 의미합니다.
Ditection은 캡슐이 향하는 방향을 의미합니다. 축의 방향은 로컬 좌표계를 따릅니다.
3. Sphere Collider
스피어 콜라이더는 캡슐콜라이더에서 Height를 제외한 것과 같습니다.
트리거(Is Trigger)
콜라이더끼리 충돌을 하면 부딪치므로써 작용반작용이 작용해버립니다. 물체를 통과하면서 이 콜라이더를 지나쳤는지 알고 싶다면 트리거를 사용하면 됩니다.
좌측은 트리거를 해제하였을 때, 우측은 트리거를 체크하였을 때의 차이입니다.
충돌 감지하기
충돌 감지를 하기위해 Enter, Stay, Exit가 쓰입니다.
OnCollisionEnter | 물체가 콜라이더와 충돌할 때 한 번 실행됩니다. |
OnCollisionStay | 물체가 콜라이더와 충돌하는 동안 실행됩니다. |
OnCollisionExit | 물체가 콜라이더와 충돌을 끝낼 때 한 번 실행됩니다. |
void OnCollisionEnter(Collision collision) {
//실행문
}
void OnCollisionStay(Collision collision) {
//실행문
}
void OnCollisionExit(Collision collision) {
//실행문
}
위 함수가 실행될 때 매개변수로 지정된 collision을 통해 충돌한 물체의 요소들을 사용할 수 있습니다.
트리거 충돌 감지하기
트리거의 충돌을 감지할 때에는 조금 달라집니다.
트리거가 어느 쪽이든 실행됩니다.
OnTriggerEnter | 트리거와 물체가 충돌할 때 한 번 실행됩니다 |
OnTriggerStay | 트리거와 물체가 충돌하는 동한 실행됩니다 |
OnTriggerExit | 트리거와 물체의 충돌이 끝날 때 한 번 실행됩니다 |
void OnTriggerEnter(Collider other) {
//실행문
}
void OnTriggerStay(Collider other) {
//실행문
}
void OnTriggerExit(Collider other) {
//실행문
}
물리 머터리얼
Dynamic Friction은 물체가 움직일 때 작용하는 마찰력입니다.
Static Friction은 물체가 정지할 때의 마찰력입니다.
Bounciness는 탄성계수를 나타냅니다.
Combine들 (두 값이 다를 때 어떤 값을 따를 것이냐)
Average | 두 값의 평균 |
Minimum | 두 값 중 작은 값 |
Maximum | 두 값 중 큰 값 |
Multiply | 두 값의 곱 |
만약 두 콜라이더에 설정된 Combine이 다를 경우 Average < Minimum < Multiply < Maximum 순을 따른다
그냥 몇 가지 적어놓기
- 두 물체 간에 충돌을 내고 싶다면 두 물체 모두 콜라이더가 있어야 합니다.
- 리지드바디는 없어도 콜라이더만 있다면 충돌합니다. 리지드바디가 없다면 물리가 작용하지 않을 뿐
- 트리거끼리는 충돌감지가 되지 않습니다.
https://docs.unity3d.com/kr/2018.4/Manual/CollidersOverview.html
'Unity > 다루기' 카테고리의 다른 글
[유니티] 거리 측정하기 (0) | 2021.06.06 |
---|---|
[유니티] 난수 발생 (0) | 2021.05.30 |
[유니티] 3. 이동시키기 (0) | 2021.05.19 |
[유니티] 2. 키보드 입력받기 (Input) (0) | 2021.05.12 |
[유니티] 1. 리지드바디 (Rigidbody) (0) | 2021.05.11 |