본문 바로가기
Unity/01.General

Collider

by 레드아이™ 2020. 8. 4.

충돌을 감지하기 위한 Component

(Unity 2019.4.5f1 기준)

 

Collider는 GameObject 별로 부여해야 GameObject 사이에 물리 계산이 됨.

게임 중 이동해야 하는 객체에는 Rigidbody component가 있어야함.

Rigidbody component가 추가되어 있다면 Collider의 타입에 따라 물리적 반응을 함.

(예: Box mesh+Rigitbody+Sphere collider: Box가 구처럼 굴러감)

 

Sphere(반지름) > Capsule(반지름+높이) > Box(가로*세로*높이) 순으로 감지속도가 빠름

 

Component - Physics - Rigidody/Box/Sphere/Capsule/Mesh/Wheel/Terrain Collider 선택

(OnCollisionEnter, OnCollisionExit 함수를 사용하여 event를 발생시킴)


Rigidbody

NVIDIA PhysX 물리엔진에 의해 GameObject의 물리적 동작을 가능하게 하는 메인 Component이며 추가시 중력에 즉시 반응한다. Collider component를 추가할 경우 GameObject 사이의 충돌을 감지한다.

Rigidbody component가 추가된 GameObject는 스크립트에서 Transform 속성(position, rotation)을 변경하여 이동시키면 안되며 대신에 Force를 적용하여 물리엔진에 의해 이동시키게 한다. 

 

 

Mass: 1=1kg 기준

Drag: 직진 운동을 할때의 마찰계수 (공기저항). 0=저항이 없음, 무한대=즉시 정지

Angular Drag: 회전 마찰계수. 0=저항이 없음, 무한대로 설정해서 정지시킬 수 없음.

Use Gravity: 중력의 영향을 받음 (-9.81m/s로 기본 설정되어 있음, Edit-Project Settings-Physics 에서 변경 가능)

Is Kinematic: 선택 시 물리엔진에 영향을 받지 않으며, Script의 Transform에 의해서만 조정이 가능 (플랫폼을 옮기는 경우나 HingeJoint 가 추가된 Rigidbody를 애니메이션화하는 경우에 유용)

Interpolate: Update 함수와 FixedUpdate 함수와의 시간 차에 의해 발생하는 움직임의 떨림 현상을 보간 (Interpolate:이전 Frame의 Transform을 활용, Extrapolate: 다음 Frame의 Transform 예상값 활용)

Collision Detection: 빠르게 움직이는 GameObject가 Frame 중간에 충돌감지 없이 다른 GameObject를 지나쳐 가는 것을 방지(Discrete: 일정한 간격의 시간에 충돌감지, 간격 사이의 충돌을 감지 못함, 부하가 적음, Continuous: Update 프레임마다 지속적으로 출동감지, 물리연산 부하가 높음, Continuous Dynamic: 동적으로 움직이는 물체사이의 충돌도 감지, 물리연산 부하가 높음)

Constraint: 2D/3D 환경에 맞춰 축의 Position/Rotation 계산을 제한 (계산의 부하를 줄여서 Performance를 상승시킬 수 있음)


Box Collider

직육면체의 기본 Collider이며, 상자 형태의 GameObject에 유용하다.

Edit Collider: 박스 형태를 변경한다.

Is Trigger: 선택 시, Event를 trigger하는데만 사용되고, 물리엔진의 적용받지 않는다. (OnTriggerEnter, OnTriggerExit 함수를 사용)

Material: Collider가 다른 Collider와 상호작용하는 Physic Material(마찰, 바운스 등)을 설정

Center: GameObject 좌표축 기준의 Collider 중심 위치

Size: Collider의 크기


Sphere Collider

구 형태의 기본 Collider이며, 구 형태의 GameObject 뿐만 아니라 낙하는 하는 바위 및 굴러 떨어져야 하는 GameObject에도 유용하다.

Edit Collider: Quad점을 이동해서 구의 크기를 변경한다.

Is Trigger: 선택 시, Event를 trigger하는데만 사용되고, 물리엔진의 적용받지 않는다.

Material: Collider가 다른 Collider와 상호작용하는 Physic Material(마찰, 바운스 등)을 설정

Center: GameObject 좌표축 기준의 Collider 중심 위치

Radius: Collider 구의 반지름


Capsule Collider

캡슐 형태의 기본 Collider이며, 막대 형태에 유용하다.

Edit Collider: Quad점을 이동해서 구의 크기를 변경한다.

Is Trigger: 선택 시, Event를 trigger하는데만 사용되고, 물리엔진의 적용받지 않는다.

Material: Collider가 다른 Collider와 상호작용하는 Physic Material(마찰, 바운스 등)을 설정

Center: GameObject 좌표축 기준의 Collider 중심 위치

Radius: Collider 반구 부분의 반지름

Height: Collider 전체 높이

Direction: 캡슐의 local 좌표상의 길이 방향을 설정


Mesh Collider

복잡한 형태의 Mesh일 경우, Mesh를 불러와서 Collider의 형태로 적용 시킬 수 있다. 정교한 collision detection이 가능하다.

Convex: 선택 시, 다른 Mesh Collider와 충돌한다. Convex mesh collider는 255개의 triangle로 제한된다.

Is Trigger: Convex 선택시에만 활성화 되며, 선택 시, Event를 trigger하는데만 사용되고, 물리엔진의 적용받지 않는다

Cooking Options: 물리엔진이 Mesh를 처리하는 방식

  • None:
  • Everything:
  • Cook for Faster Simulation:
  • Enable Mesh Cleaning:
  • Weld Colocated Vertices:

Material: Collider가 다른 Collider와 상호작용하는 Physic Material(마찰, 바운스 등)을 설정

Mesh: 충돌에 사용할 Mesh asset


Wheel Collider (Scripting References)

지상에 놓여있는 차량을 위한 특수 Wheel Collider이며, 일반 Physics Engine과는 별도로 작동하는 충돌/물리 효과 등 Slip-based Friction 모델이 포함되어 있다. 더욱 사실적인 움직임을 보여주지만, Physic Material을 무시한다. 따라서 실제 Wheel GameObject와는 별도의 GameObject에 Collider를 적용한다.

Wheel이 아닌 다른 GameObject에도 사용이 가능하지만, 차량용 목적으로 개발된 Collider이다.(Wheel Collider Tutorial에서 예제 확인 가능)

Mass: Wheel의 질량

Radius: Wheel의 반지름

Wheel Damping Rate: Wheel에 적용되는 감쇠력 값(스프링의 진동을 멈추게 하기 위한 쇼크 업소버의 저항력)

Suspension Distance: Local space의 Y축 기준의 Wheel Suspension 거리 최대값

Force App Point Distance: Suspension 방향 기준으로 정지상태에서 Wheel에 Force가 적용되는 지점(Wheel Base를 기준으로 떨어진 m 거리). forceAppPointDistance = 0 일 경우, 정지상태에서 Force는 Wheel Base에 작용함. 좋은 차량 일수록 차량 무게 중심 살짝 아랫 부분에 Force가 적용된다.

Center: Local space 기준 Wheel의 중심 위치

Suspension Spring: Suspension이 Spring 및 Damping Force를 사용해서 Target Position에 도달하려는 값

  • Spring: 값이 높을 수록 Target Position에 더 빨리 도착.
  • Damper: Suspension 속도를 낮춤. 값이 높을 수록 Suspension Spring이 천천히 움직임.
  • Target Position: Suspension의 남은 움직임 값. 1값은 완전히 확장된 Suspension의 상태를, 0값은 완전히 압축된 Suspension의 상태를 나타냄. 일반적 차량의 Suspension 값으로 0.5를 사용.

Forward/Sideways Friction: Wheel이 전진할때와 측면으로 밀렸을 때의 마찰 값

실제 타이어의 속성은 타이어의 고무가 늘어남에 따라 Slip을 보상하기 때문에 낮은 Slip에서 높은 힘을 낼 수 있다. 나중에 Slip이 정말로 높아지면 타이어가 슬라이드 또는 스핀을 시작하여 힘이 줄어듭니다. 따라서 타이어 Friction Curve의 형태는 아래 이미지와 비슷합니다.

일반적인 Wheel Friction Curve

  • Extremum Slip(X축)/Value(Y축): Friction Cuve에서의 Extremuim의 지점
  • Asymptote Slip(X축)/Value(Y축): Friction Curve에서의 Asymptote의 지점
  • Stiffness: 마찰의 강도. 0값은 Wheel의 모든 Friction이 사라진다.

Terrain Collider

적용된 Terrain의 형태에 맞는 Collider 표면을 구현

Material: 다른 GameObject와 상호 작용하는 방식을 정의하는 Physic Material을 연결

Terrain Data: Terrain Data 연결

Enable Tree Colliders: 선택시 Tree Collider가 작동함.

 

 

 

댓글