https://docs.unity3d.com/kr/2021.3/Manual/class-Rigidbody.html

 

리지드바디 - Unity 매뉴얼

Rigidbody 는 GameObject 가 물리 제어로 동작하게 합니다. 리지드바디는 힘과 토크를 받아 오브젝트가 사실적으로 움직이도록 해줍니다. 리지드바디가 포함된 모든 게임 오브젝트는 중력의 영향을

docs.unity3d.com

Rigidbody는 물리 엔진과 상호 작용할 수 있도록 게임 오브젝트에 물리적 특성을 부여하는 컴포넌트이다.

Rigidbody를 사용하면 게임 오브젝트는 물리적인 힘과 중력 등에 영향을 받게 되어 움직임 및 충돌과 같은 물리 시뮬레이션을 구현할 수 있다

Rigidbody가 포함된 모든 게임 오브젝트는 중력의 영향을 받아야 하며 스크립팅을 통해 가해진 힘으로 움직이거나 NVIDIA PhysX 물리 엔진을 통해 다른 오브젝트와 상호 작용해야 한다고 공식 매뉴얼에 기술되어 있다.

 

 

Transform 조작과 RIgidbody 조작의 가장 큰 차이점은 힘의 사용이다.

Rigidbody는 힘과 토크를 받을 수 있지만Transform은 그렇지 않고 트랜스폼도 회전할 수는 있지만 물리를 사용할 때와는 다르다.

Rigidbody에 힘/토크를 더하면 오브젝트 Transform 컴포넌트의 포지션과 회전값을 바꾼다.

그러므로 둘 중에서 하나만을 사용해야 하며 Transform을 바꾸면서 물리를 사용하면 충돌 및 기타 연산에 문제가 발생할 수 있다.

원하는 대로 정확하게 동작시키려면 Collider 나 조인트를 추가해야한다.

콜라이더(Colliders)

콜라이더는 충돌이 일어나게 만들기 위해 Rigidbody에 함께 추가해야 하는 또 다른 유형의 컴포넌트, 두 개의 Rigidbody가 서로 충돌하더라도 두 오브젝트 모두 콜라이더가 추가되어 있지 않으면 물리 엔진은 충돌을 연산하지 않고 콜라이더가 없는 리지드바디는 물리 시뮬레이션 동안 서로를 지나쳐가기만 한다.

 

가장 간단한(그리고 프로세서에 부하를 주지 않는) 콜라이더는 기본 콜라이더 타입입니다. 3D에서는 박스 콜라이더스피어 콜라이더캡슐 콜라이더가 바로 이 타입입니다. 2D에서는 박스 콜라이더 2D와 써클 콜라이더 2D를 사용할 수 있습니다. 복합 콜라이더 를 만들기 위해 이러한 콜라이더를 단일 게임 오브젝트에 원하는 만큼 추가할 수 있습니다

 

일반적으로  Mesh 콜라이더는 서로 충돌하지 않습니다. Mesh 콜라이더가 Convex 로 지정되면 다른 Mesh 콜라이더와 충돌할 수 있습니다. 일반적인 해결책은 움직이는 모든 오브젝트에는 기본 콜라이더를 사용하고 정적 배경 오브젝트에는 Mesh 콜라이더를 쓰는 것입니다

 

연속 충돌 검사(Collision Detection)

연속 충돌 검사는 빠르게 움직이는 콜라이더가 서로 통과하는 것을 방지하는 기능입니다. 일반적인(Discrete) 충돌 검사를 사용할 때 이런 일이 발생할 수 있는데 한 프레임에서 오브젝트 하나가 콜라이더의 이쪽 편에 있고 다음 프레임에서 이미 콜라이더를 지나쳐버리는 것입니다. 빨리 움직이는 오브젝트의 리지드바디에서 연속 충돌 검사를 활성화하면 문제를 해결할 수 있습니다. 충돌 검사 모드를 Continuous 로 설정해 리지드바디가 다른 정적 (즉, 리지드바디가 아닌)메시 콜라이더를 통과하지 않게 합니다. Continuous Dynamic 으로 설정해도 리지드바디가 Continuous 또는 Continuous Dynamic 으로 충돌 검사 모드가 설정된 리지드바디를 통과하지 않습니다.

연속 충돌 검사는 박스-, 구체- 및 캡슐 콜라이더 용으로 지원됩니다. 연속 충돌 검사는 오브젝트가 서로 통과하는 경우에 충돌을 잡기 위한 안전망 역할을 하나 물리적으로 정확한 충돌 결과를 내지는 않습니다. 그러므로 빠르게 움직이는 오브젝트와 관련해 문제가 생기면 TimeManager 인스펙터의 고정 타임 스텝 값을 줄여 보다 정확한 시뮬레이션을 구현하는 방안을 고려할 수 있습니다.

 

  • 두 리지드바디의 상대 Mass 는 둘이 서로 충돌했을 때 어떻게 반응할지를 결정합니다.
  • 한 리지드바디의 Mass 를 다른 리지드바디보다 크게 만들어도 자유 낙하 시 더 빨리 낙하하지 않습니다. 이 경우 Drag 를 사용해야 합니다.
  • Drag 값이 작으면 오브젝트가 무거워 보이고 값이 크면 가벼워 보입니다. Drag 의 일반적인 값은 .001(단단한 금속 덩어리)과 10(깃털) 사이입니다.
  • 오브젝트의 Transform 컴포넌트를 직접 조작하면서도 물리 연산이 필요하다면 리지드바디를 추가하고 키네마틱으로 만듭니다.
  • Transform 컴포넌트를 통해 게임 오브젝트를 이동시키면서도 충돌/트리거 메시지를 받고자 한다면 이동하는 오브젝트에 리지드바디를 추가해야 합니다.
  • 앵글 드래그를 무한대로 설정하는 것 만으로는 오브젝트의 회전을 멈추게할 수는 없습니다.

 

'Unity' 카테고리의 다른 글

[Unity #] UI 에서 RayCast  (2) 2024.02.13
[Unity #] 유니티에서 Font-awesome 사용하기  (0) 2024.01.29
[Unity] SerializeField ? 직렬화 ?  (0) 2024.01.22
[Unity C#] Vector3  (0) 2024.01.22
2024-01-10  (0) 2024.01.10

+ Recent posts