[Unity] 물리 충돌 처리를 위한 컴포넌트 (Collider / Rigidbody)

⭐ 물리적 연산과 충돌을 위한 컴포넌트

게임 오브젝트 끼리의 충돌 여부를 계산하거나 물리적 연산을 하기 위해

특정 컴포넌트를 추가해야 합니다.

 

바로 Collider와 Rigidbody 컴포넌트입니다.

해당 컴포넌트의 속성 값을 조정하여 물체의 질량, 중력, 충돌 여부 등을 결정할 수 있습니다.

지금부터 두 컴포넌트에 대해서 자세히 알아보겠습니다.

 

 

⭐ Collider 컴포넌트

● 게임 오브젝트의 물리적 경계(충돌 영역)를 정의하는 역할을 하는 컴포넌트입니다.

● 박스, 구, 캡슐 등 다양한 형태의 Collider 컴포넌트가 있습니다.

다양한 종류의 콜라이더

 

Collider의 속성

IsTrigger: 물리적 충돌을 할지 말지의 여부를 정합니다. true → 물리적 충돌 x / false → 물리적 충돌 o

● Material: 물리적 반응을 조절할 수 있습니다.

 

대표적인 Collider 종류


Sphere Collider

● 구 형태의 콜라이더입니다.

● 원점으로부터 모든 방향의 거리가 같기 때문에 Box Collider, Mesh Collider 등 보다 연산이 빠릅니다.

Sphere Collider

 

 

Box Collider

● 박스 형태의 콜라이더입니다.

Box Collider

 

 

Capsule Collider

● 캡슐 형태의 콜라이더입니다.

Capsule Collider

 

Mesh Collider

● 실제 메쉬(폴리곤) 형태의 콜라이더입니다.

● 연산 비용이 비쌉니다.

    ○ Mesh Collider의 비용 때문에 빈 공간을 감안하고 위의 다른 콜라이더를 한 개 또는 여러 개를 사용하는 경우도 있습니다.

 

 

 

⭐ Rigidbody 컴포넌트

● 오브젝트에 현실적이고 사실적인 물리 엔진 기능을 추가해 줍니다.

    ○ 질량, 중력, 관성 등의 물리적인 설정을 조절할 수 있습니다.

 

 

 

 

Rigidbody 속성


Rigidbody 인스펙터 속성

 

Mass

    ○ 오브젝트의 질량

    ○ 값이 클수록 물리적인 힘을 덜 받습니다.

 

● Drag

    ○ 오브젝트가 힘에 의해 움직일 때 공기 저항이 영향을 미치는 강도

    ○ 값이 크면 속도가 더 빨리 줄어듭니다.

    ○ Use Graivity를 적용하면, Drag 값이 클 수록 천천히 떨어집니다.

 

● Angular Drag

    ○ 오브젝트의 회전 운동에 대한 저항

    ○ 값이 클 수록 회전이 빨리 멈춥니다.

 

● Automatic Center Of Mass

    ○ 오브젝트의 질량이 평균적으로 분포된 무게 중심

    ○ on → Collider 모양을 기준으로 자동 계산

    ○ off → 사용자가 Rigidbody.centerOfMass 속성을 직접 설정해서 원하는 지점을 지정 가능

       (예: 자동차 오브젝트의 무게중심을 낮게 설정해 전복 방지)

 

● Automatic Tensor

    ○ 물체가 회전하려 할 때 저항하는 정도를 나타내는 값

    ○ 단순히 질량이 아니라 질량이 어떤 형태로 분포되어 있는지에 따라 달라집니다.

    ○ 관성 Tensor 값이 높을수록 Rigidbody가 축에서 회전하는 데 더 많은 토크가 필요합니다.

    ○ on → Collider 모양과 질량에 맞춰 자동으로 계산

    ○ off → 사용자가 Rigidbody.inertiaTensor와 Rigidbody.inertiaTensorRotation을 직접 설멍해서 원하는 회전 특성을 줄 수 있         습니다. (예: 균형 맞추기 힘든 로봇 → 회전 저항을 강제로 크게 설정)

 

● Use Gravity

    ○ 오브젝트에 중력을 적용할 지에 대한 여부를 결정

    ○ 기본 값은 y -9.81 → 지구와 가장 비슷한 중력

    ○ Edit - Project Settings - Physics 에서 Gravity 설정값을 이용해 중력 기본값 설정 가능

    ○ on → 오브젝트에 중력이 적용됩니다. (따로 설정해주지 않으면 아래로 떨어짐)

    ○ off → 오브젝트에 중력이 적용되지 않습니다. (공중에 떠 있음)

 

● Is Kinematic

    ○ 물리 엔진의 영향을 받을지 말지에 대한 여부를 결정

    ○ on → 물리 엔진으로 인한 움직임을 계산하지 않음, 단 Transform으로 직접 제어 가능 = 코드로 움직임 가능

    ○ off → 물리 엔진으로 인한 움직임 계산 o

    ○ 주로 스크립트로만 움직이는 오브젝트나 충돌 반응을 원치 않는 경우 사용합니다.

        (예: 맵의 환경 요소 - 만렙 나무 등)

 

● Interpolate

    ○ 물체의 움직임을 더 부드럽게 보이도록 보간 처리하는 기능

    ○ 움직임이 끊기는 것을 줄여줍니다.

 

    ○ None: 기본 설정이며, 최소한의 처리가 필요합니다. 물리 개체가 매우 빠르게 움직이지 않거나 약간의 흔들림이 문제되지

       않는 게임에 적합합니다.

    ○ Interpolate: 이전 프레임 → 현재 프레임 위치를 기준으로 보간 처리

    ○ Extrapolate: 현재 위치 → 다음 위치를 추정해서 보간 처리

 

● Collision Detection

    ○ 충돌 감지를 어떤 방식으로 처리할지 정하는 설정

 

    ○ Discrete: 기본 출동 방식으로 매 물리 프레임마다 현재 위치에서 충돌을 검사합니다.

        ■ 빠른 물체는 Collider를 건너뛰고 통과해버릴 수도 있습니다.

        ■ 가장 성능이 가볍습니다.

    ○ Continuous: 현재 위체 → 다음 위치의 경로에 충돌체가 있는지 검사합니다.

        ■ 빠른 속도의 작은 물체가 Collider가 통과하는 현상을 방지합니다.

        ■ 움직이는 Rigidbody와 정적인 Collider 충돌에 적합 (예: 배경이나 정적 오브젝트와의 충돌에 사용)

    ○ Continuous Dynamic: Coninuous와 Continuous로 설정된 동적 Collider 와의 충돌도 검사합니다.

        ■ 가장 정확하지만 가장 성능이 큰 옵션입니다.

        ■ 고속으로 움직이는 큰 물체(차량, 빠른 캐릭터 충돌 등에 사용)

    ○ Continuous Speculative: 경로 기반 예측 방식을 사용하여, 작은 물체라도 충돌 가능성이 있으면 미리

       검사합니다.

        ■ Continuous 보다 안정적일 때가 있고 비용은 상대적으로 적습니다.

 

● Constraints

    ○ 회전과 위치를 제어하는데 사용되는 enum 입니다.

    ○ 체크하면 물리적인 움직임, 회전을 모두 무시합니다. 단 스크립트로는 제어 가능합니다.

 

    ○ Freeze Position: 체크하면 x, y, z 축 이동을 각각 고정할 수 있습니다.

    ○ Freeze Rotation: 체크하면 x, y, z 축 회전을 각각 고정할 수 있습니다.

 

● Layer Overrides

    ○ 레이어를 이용한 확장 기능을 사용할 수 있게 해줍니다.

    ○ 충돌 행렬 (Edit - Project Settings - Physics - Layer Collision)과 별개로 현재

       오브젝트의 충돌 허용, 무시 레이어를 설정합니다.

 

    ○ Include Layers: 설정된 레이어들을 충돌 대상으로 포함합니다.

    ○ Exclude Layers: 설정된 레이어들을 충돌 대상에서 제외합니다.