collider

유니티에서 콜라이더란 물리 충돌 처리를 위한 오브젝트의 형태를 의미한다.

콜라이더를 적용하면 게임씬에서는 보이지 않으므로 다양한 모양으로 적용시킬 수 있다.

이때, 꼭 메시와 동일한 모양이 아니여도 됨.

유니티에서 기본적으로 제공해주는 형태가 있으며 그 중에서도 기본콜라이더는 3가지가 존재한다.(3D)

  1. Sphere Collider
  2. Capsule Collider
  3. 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;
    }
}

충돌 대상의 게임오브젝트를 받아오는 스크립트..!

이 처럼 충돌 대상의 오브젝트의 정보를 얻어서 해당 오브젝트에 직접 접근할 수 있다.

태그: ,

카테고리:

업데이트:

댓글남기기