포스트

유니티 Collider 기초와 활용법 - CCGrape

유니티에서 충돌을 감지하는 Collider의 기초 개념과 활용법에 대하여 알아봅니다.

목차

Step 0. 유니티에서 Collider를 배워야하는 이유
Step 1. Collider란?
Step 2. Rigidbody란?
Step 3. Trigger와 Collision의 차이
Step 4. 활용 예시
Step 5. 마무리 요약


Step 0. 유니티에서 Collider를 배워야하는 이유

Collider를 아는 것은 GameObject들이 서로 상호작용하고 물리적 충돌을 처리하며 다양한 이벤트를 처리하는 데 필수적입니다. 게임의 몰입감을 높이고 자연스러운 움직임상호작용을 구현하는데 핵심적인 역할을 하기 때문에 반드시 배워야 합니다.

충돌 감지는 ColliderRigidbody를 사용하여 처리하기 때문에 ColliderRigidbody의 기본 개념을 설명하고, 2D와 3D 차이를 포함해 Trigger()Collision() 함수들에 대해 다루겠습니다. 또한, 상황에 맞는 활용법도 함께 소개하겠습니다.


Step 1. Collider란?

Collider는 GameObject가 충돌을 감지할 수 있도록 해주는 컴포넌트입니다.

단, 충돌만 감지하며 물리적인 반응(중력, 가속 등)하지 않습니다. Collider는 GameObject의 외곽선을 정의하고, 다른 Collider와 겹칠 때 Unity가 충돌 이벤트를 처리하게 됩니다.

① 2D Collider와 3D Collider의 차이

  • 2D Collider
    • 2D 환경에서 사용되며, 2D 게임에서 캐릭터나 GameObject의 충돌을 감지하는 데 사용합니다.
    • 종류로는 BoxCollider2D, CircleCollider2D, PolygonCollider2D 등이 있습니다.

  • 3D Collider
    • 3D 환경에서 사용되며, 3D 게임에서 캐릭터나 GameObject의 충돌을 감지하는 데 사용합니다.
    • 종류로는 BoxCollider, SphereCollider, CapsuleCollider 등이 있습니다.

충돌 감지를 하려면 충돌하는 물체 중 적어도 하나에는 Rigidbody 컴포넌트가 필요합니다.
예를 들어 A와 B가 충돌할때 Rigidbody둘 다 없으면 충돌감지가 되지 않습니다.
반대로 A 또는 B 중 적어도 하나에만 있거나 둘 다 있어도 충돌을 감지합니다.


Step 2. Rigidbody란?

Rigidbody는 GameObject에 물리적인 특성을 부여하는 컴포넌트입니다. 중력, 가속도, 힘 등을 적용할 수 있으며, GameObject가 자연스러운 물리 법칙을 따르도록 합니다. Collider와는 달리 Rigidbody는 GameObject의 물리적 반응을 처리합니다.

① 2D Rigidbody와 3D Rigidbody의 차이

  • Rigidbody2D
    • 2D 물리 엔진을 통해 2D 게임에서 중력, 충돌 반응을 처리합니다.

  • Rigidbody
    • 3D 물리 엔진을 사용하여 3D GameObject의 물리적 특성을 제어합니다.

이번 포스팅에서는 Collider를 중점적으로 다루겠습니다. Rigidbody에 대한 더 자세한 포스팅은 다음 링크를 참고해주세요.

[더 자세한 Rigidbody 포스팅]


Step 3. Trigger와 Collision의 차이

① Trigger

Trigger non checked

Trigger물리적으로 충돌을 발생시키지 않지만, GameObject가 Collider 안으로 들어올 때 이벤트를 발생시킵니다.

예를 들어, 문이 자동으로 열리는 이벤트를 설정하고 싶을 때 Trigger를 사용하면 좋습니다.

Trigger를 사용하려면 ColliderIs Trigger 옵션을 활성화해야 합니다. 그러면 GameObject 간의 충돌은 발생하지 않고, Collider 내부에 들어오면 이벤트가 발생합니다.

  • 관련 함수
    • OnTriggerEnter(): 다른 Collider가 Trigger 영역에 진입할 때 호출됩니다.
    • OnTriggerStay(): 다른 Collider가 Trigger 영역 내에 머무는 동안 호출됩니다.
    • OnTriggerExit(): 다른 Collider가 Trigger 영역에서 나갈 때 호출됩니다.

② Collision

Collision물리적으로 GameObject 간의 충돌을 처리하는 방식입니다. 오브젝트가 서로 부딪히면, 충돌에 대한 물리적 반응(반동, 밀림 등)이 발생합니다.

  • 관련 함수
    • OnCollisionEnter(): Collider가 다른 Collider와 처음 충돌할 때 호출됩니다.
    • OnCollisionStay(): Collider가 다른 Collider와 계속해서 충돌할 때 호출됩니다.
    • OnCollisionExit(): Collider가 다른 Collider와 충돌을 종료할 때 호출됩니다.

Step 4. 활용 예시

① Trigger 활용 예시: 문 열기

Trigger checked

  1. 문 GameObjectBoxCollider를 추가하고, Is Trigger체크합니다.
  2. 캐릭터가 문에 접근할 때 OnTriggerEnter() 함수가 호출되어 문이 열립니다.
1
2
3
4
5
6
void OnTriggerEnter(Collider other) {
    if (other.CompareTag("Player")) {
        // 문 열기
        OpenDoor();
    }
}

② Collision 활용 예시: 장애물 충돌

Collision example

  1. 장애물과 캐릭터 GameObject에 RigidbodyBoxCollider를 추가합니다.
  2. 캐릭터가 장애물에 부딪힐 때, OnCollisionEnter() 함수를 통해 충돌을 감지하고 반응합니다.
1
2
3
4
5
6
void OnCollisionEnter(Collision collision) {
    if (collision.gameObject.CompareTag("Obstacle")) {
        // 캐릭터가 장애물에 부딪혔을 때의 처리
        TakeDamage();
    }
}

Step 5. 마무리 요약

  • Collider는 GameObject가 충돌할 수 있는 외곽선을 정의합니다.
  • Rigidbody는 GameObject에 물리적인 특성을 부여합니다.
  • Trigger물리적 충돌 없이 이벤트만 감지하는데 사용되며, Collision물리적인 충돌을 처리합니다.
    • 충돌 감지를 위해서 충돌하는 물체들 중 적어도 1개에는 Rigidbody 컴포넌트가 필요합니다.
  • 2D와 3D 게임 개발 시 각 환경에 맞는 Collider와 Rigidbody를 사용해야 합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.