Unity OnCollision와 OnTrigger의 차이

이시율·2025년 5월 7일
0

문을 열고닫는 로직을 구현하기 위해 처음에는 OnCollisionEnter2D를 사용하였다.

void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            doorControll = true;
        }
    }

OnCollision2D가 발생하기 위해선 아래 내용이 적용 되어야 한다.

  • Collider2D와 Rigidbody2D가 적용 되어있는지 (Rigidbody2D는 한쪽만 구성되어있어도 된다.)
  • Collider2D의 isTrigger는 false여야 한다.
  • 물리적 충돌이 발생해야 한다.

위 내용으로 문을 열고 닫는 로직을 만들었을 때 문을 여는 건 되지만 통과하기 위해 isTrigger를 true로 하게되어 OnCollisionEnter2D가 발생하지 않아 doorControll을 true로 받을 수 없어, 문을 닫을 수는 없게된다.

다음으로 OnTriggerEnter2D를 살펴보았다.

void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            doorControll = true;
        }
    }

OnTriggerEnter2D가 발생하기 위해선 아래 내용이 적용되어야 한다.

  • Collider2D와 Rigidbody2D가 적용 되어있는지 (Rigidbody2D는 한쪽만 구성되어있어도 된다.)
  • 최소 한개의 오브젝트는 isTrigger가 true여야 한다.
  • 오브젝트가 Collider의 영역에 들어가 있는지

최종적으로 위에 OnTriggerEnter2D를 통해 문을 여닫는 로직을 구현하였다.

앞으로 구현할때는 간단하게 아래 2가지를 알면 될 것 같다.

  • OnColliderEnter2D : 물체가 통과하지 못하는 오브젝트에 닿았을 때 발생할 이벤트
    ex) 벽에 닿으면 사라지는 투사체

  • OnTriggerEnter2D : 특정 영역에 들어갔을 때 발생할 이벤트
    ex) Zep의 프라이빗 영역

그외에 OnTriggerExit2D 같은 Enter 대신에 Exit를 쓰면 해당 영역을 떠났을 때 이벤트가 발생한다.

0개의 댓글