[Unity] Collider
collider
유니티에서 콜라이더란 물리 충돌 처리를 위한 오브젝트의 형태를 의미한다.
콜라이더를 적용하면 게임씬에서는 보이지 않으므로 다양한 모양으로 적용시킬 수 있다.
이때, 꼭 메시와 동일한 모양이 아니여도 됨.
유니티에서 기본적으로 제공해주는 형태가 있으며 그 중에서도 기본콜라이더는 3가지가 존재한다.(3D)
- Sphere Collider
- Capsule Collider
- Box Collider
순서대로 가장 연산속도가 빠르며 위 순서로 사용할 것을 권장
2D의 경우 박스와 서클 콜라이더로 대체하여 사용한다.
만약 자신이 고성능 게임을 위해 기본콜라이더로 표현하지 못한다면 복합콜라이더를 만들어서 적용시키거나 메시콜라이더를 사용하여 메시형태에 맞게 콜라이더를 적용시킬 수 있다.
예상대로 메시콜라이더(2D는 폴리곤콜라이더)는 값이 비쌈
TEST
위와 같은 게임씬이 존재한다고 했을 때 공이 바닥이 충돌하여 정지를 하고 싶다면 그래픽(랜더러), 위치(트랜스폼) 컴포넌트를 제외한다면 몇개의 컴포넌트가 필요할까?
충돌 처리를 위해서는 rigidbody가 필요하다. -> 만약 콜라이더만 존재한다면 충돌 할 경우가 없기 때문..!
4개라고 생각할 수 있지만 sphere의 콜라이더, 리지드바디 그리고 바닥의 콜라이더만 있으면 해결된다.
콜라이더 세부사항
기본적인 콜라이더 컴포넌트의 모습이며 모양에 따라 사이즈를 수정할 수 있는 모습이 다르다.
Edit Collider
를 통해 기본적인 모양은 유지한 채로 크기가 수정 가능하다.
isTrigger
는 스크립트상에서 OnTrigger이벤트함수들로 호출되며 실제로 충돌처리를 무시한다.
체크에 따라 트리거로 동작하는지, 콜리전으로 동작하는지 선택가능하다.
Material
은 충돌시에 발생하는 물리적 특징을 적용시킬 수 있는데 이러한 머터리얼을 Physics Material라고 하며 프로젝트뷰에서 추가할 수 있다.
해당 머터리얼은 나중에 따로 다룰 예정..!
충돌 처리 방법
앞서 다룬 유니티 라이프 사이클의 OnTrigger, OnCollision함수들이 자동으로 호출되게 된다.
Trigger와 Collision의 차이점은 해당 콜라이더 컴포넌트에 isTrigger항목을 체크여부에 따라 결정된다.
- Trigger로 전환된 경우 충동체크는 되지만 해당 콜라이더의 충돌은 이루어지지 않는다.
- 따라서 OnTrigger관련 함수로 체크
- Collision의 경우 충돌체크와 충돌처리가 이루어짐
- 따라서 OnCollision관련 함수로 체크
실행 순서는 앞에서 설명했으니 작동과정을 이해한다면 코드를 작성하는데 있어서는 문제가 없다.
public class collider_test : MonoBehaviour
{
private Rigidbody myrigidbody;
private void Start()
{
myrigidbody = GetComponent<Rigidbody>();
}
private void OnCollisionEnter(Collision other) {
myrigidbody.AddForce(new Vector3(0, 100, 0));
}
}
위 스크립트가 부착된 컴포넌트는 충돌이 발생하게 되면(충돌처리가 되어야 하기 때문에 충돌 대상에 대한 콜라이더가 있어야함) y축 좌표로 힘을 100주게 되는 스크립트이다.
public class collider_test : MonoBehaviour
{
private void OnCollisionEnter(Collision other) {
GameObject gameObject = other.gameObject;
}
}
충돌 대상의 게임오브젝트를 받아오는 스크립트..!
이 처럼 충돌 대상의 오브젝트의 정보를 얻어서 해당 오브젝트에 직접 접근할 수 있다.
댓글남기기