Chapter 4-1. 충돌 : Collider & Collision & Trigger

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚖 Collider

Collider 를 붙였다고 해서 관통이 안된다거나 튕겨진다던가 하는 처리를 할 수는 없다. 그런 처리를 Collider를 참고하여 처리해주는 Rigidbody나 NavMeshAgent같은 어떤 물리적인 처리를 해주는 컴포넌트들이 하는 일이다. Collider는 어디까지나 그냥 참고사항일 뿐이다. (Collider만 띡 붙였는데 왜 충돌되어 튕기지 않고 그냥 관통될까 하는 의문이 들었는데 그 답은 Rigidbody를 붙이지 않았기 때문이었다. 둘 중 하나에 RIgidbody가 붙어 있어야…)

image

위와 같이 Mesh 는 굉장히 복잡하게 이루어져 있다. 무수한 삼각형들의 조합으로 이루어져 있기 때문에 충돌 기준을 이 Mesh 기준으로 잡으면 어마무시한 연산량이 필요할 것이다.

image

따라서 위와 같이 Box 모양인 Sphere 혹은 Capsule 모양의 Collider 를 Mesh를 감싸도록 붙여서 이렇게 단순하게 생긴 것으로 충돌 처리를 대신한다! Collider 영역 안에 오브젝트가 닿거나 들어오면 충돌한 것으로 인식 된다. FPS 같이 신체 부위 별로 데미지양을 다르게 받는다던가 등등 이런 복잡한 게임 같은 경우는 얼굴 손가락 팔 다리 손 상체 하체 등등에 각각 세밀하게 Collider를 따로 붙여주기도 한다.

  • Collider 기준으로 물리적인 충돌 처리를 해주기 때문에 Rigidbody 컴포넌트를 붙여도 Collider가 없는 오브젝트라면 물리적 충돌 처리가 되지 않고 뚫고 지나가는 등등 이런 현상이 발생하게 된다.


🚖 Collision

Collision 소개

나랑 물리적으로 부딪친 오브젝트에 대한 정보가 담겨있다.

  • OnCollisionEnter 이벤트 함수가 발생하면 매개 변수이인 Collision 타입의 collision 에 다음과 같은 정보가 담긴다.
    • 나랑 부딪친 오브젝트의 Transform, Collider, GameObject, Rigidbody, 상대 속도 등등

OnCollisionEnter

    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log(collision.gameObject.name);
    }
  • 이 스크립트가 붙은 오브젝트(나 자신)가 다른 오브젝트와 충돌시 OnCollisionEnter 이벤트가 발생하기 위한 조건. 아래 조건을 전부 만족해야 이 이벤트가 발생할 수 있다.
    1. 내가 혹은 상대방 둘 중 하나는 꼭 Rigidbody 컴포넌트를 가지고 있어야 한다.
      • IsKinematic은 꺼져 있어야 함
      • 즉, 둘 중 하나는 꼭 충돌로 인한 물리적인 힘에 영향을 받을 수 있는 상태여야 함.
    2. 나 그리고 상대방 둘 다 모두 Collider 컴포넌트를 가지고 있어야 한다.
      • IsTrigger는 꺼져 있어야 함

쓰임새 예시

FPS 게임 같은데서 총알이 사람에게 맞으면 총알 입장에선 사람 오브젝트 정보가 Collision으로 들어오게 되므로 그 사람의 체력을 깎거나 하는 처리를 할 수 있다.


🚖 Trigger

Trigger 소개

물리적으로 부딪치지 않더라도 내 Collider 범위 안에 들어온 오브젝트에 대한 정보가 담겨 있다.

  • 물리적인 피격, 충돌 없이도 그냥 Collider 범위 안에만 들어 가 있는지만 판단하고 싶을 때 사용
  • 사실적인 물리 현상 구현이 그닥 중요하지 않은 게임이라면 Trigger를 사용하여 물리적인 연산은 하지 않되 Collider 범위 안에 닿았는지만 체크하면 성능을 높일 수 있다.
    • 물리 연산은 성능을 저하시키기 때문

OnTriggerEnter

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject.name);
    }
  • 이 스크립트가 붙은 오브젝트(나 자신)가 다른 오브젝트와 충돌시 OnTriggerEnter 이벤트가 발생하기 위한 조건. 아래 조건을 전부 만족해야 이 이벤트가 발생할 수 있다.
    1. 내가 혹은 상대방 둘 중 하나는 꼭 Rigidbody 컴포넌트를 가지고 있어야 한다.
      • IsKinematic 체크 여부는 상관 없다.
    2. 나 그리고 상대방 둘 다 모두 Collider 컴포넌트를 가지고 있어야 한다.
      • 단, 둘 중 하나라도 IsTrigger는 반드시 켜져 있어야 함

쓰임새 예시

  • 칼을 휘둘렀는데 몬스터에 닿았는지 안닿았는지
    • 그냥 닿았는지만 판별하고자 할 때


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 2 카테고리 내 다른 글 보러가기

댓글 남기기