유니티 엔진에서 정말 많이 사용되는 Rigidbody 컴포넌트에 대해서 완벽하게 이해해보자.
Rigidbody는 ‘강체’라는 뜻으로 힘이나 토크를 받아서 움직이도록 할 때 사용되는 개념이다.
우리 현실 세계에서 빗대어 생각해보면 우리 주변의 모든 물체는 이 특성을 가지고 있다.
뭐, 유령이나 뭔가 영적 대상에게는 이 특성이 없다고 생각해 볼 수 있다.
또한 빛이나 소리에도 이런 특성은 없다.
재미있는 예시로는 귀신에게 물리적인 상호작용을 할 수 없다.
하지만 Rigidbody 컴포넌트를 귀신에게 넣는다면? 물리적으로 한판 싸울 수 있다.
즉, 어느 오브젝트에 Rigidbody 컴포넌트가 들어가 있다면 그 오브젝트는 물리 세계에 상호작용 가능한 오브젝트로 정의될 수 있는 것이다.
유니티에서 Rigidbody는 유니티의 물리 엔진에 의해 제어되는 오브젝트의 운동을 자동으로 처리하기 위한 컴포넌트다.
이를 통해 중력, 마찰, 힘, 충돌 등의 물리 현상을 게임 오브젝트에 적용할 수 있다.
유니티에서 Rigidbody,Rigidbody2D가 있다 각 컴포넌트에 대해서 더 자세히 알아보자.

위 이미지는 Rigidbody 컴포넌트의 인스펙터 창에 보여지는 속성들이다.
Mass : 질량을 의미한다.
타입은 float이고
충돌 계산, 힘 가속도 등에 영향을 끼치는 속성이다.
Drag : 선속도 감쇠 계수를 의미한다. 이는 공기 저항 같은 효과이다.
타입은 float이고
이 값이 0 이상이라면 물체가 천천히 멈추게 한다.
Angular Drag : 회전 속도 감쇠 계수를 의미한다.
타입은 float이고
값이 높을 수록 회전을 빠르게 멈춘다.
Automatic Center of Mass : 질량 중심에 대한 속성으로
질량 중심이란, 물리적으로 물체의 무게가 집중되어 있는 가상의 한 점을 의미한다.
이 속성을 체크 하면, 모든 콜라이더의 모양과 배치에 따라 자동으로 이 점을 계산한다.
직접 수동으로 설정이 가능하고, 코드로 설정이 가능하다.
rigidbody.centerOfMass = new Vector3(x, y, z) → 직접 코드로 설정 시
질량 중심은 무게 중심과 매우 비슷한 개념이다.
물리학적으로 약간의 차이는 있지만 게임 개발에서는 거의 동일하게 취급되는 경우가 많다.
Automatic Tensor : 회전에 대한 관성을 의미한다.
체크 시 연결된 모든 콜라이더를 기반 자동 계산하여 회전에 대한 관성 값을 가진다.
수동으로 설정 가능하다.
- Inertia Tensor 관성 텐서 값 정의
- Inertia Tensor Rotation 관성 텐서의 회전을 정의
Use Gravity : 중력 효과를 설정하는 속성이다.
체크 시 중력의 영향을 받게 된다.
Is Kinematic : Kinematic(운동학) 여부를 결정하는 속성이다.
Kinematic은 질량은 고려하지 않는 운동이다.
따라서 이 속성이 활성화되면 오브젝트를 움직이거나 회전하는데 힘을 가할 수 없고,
Tranform으로 직접 조작을 통해 위치 이동할 수 있다.
하지만 다른 Rigidbody와 Trigger 감지는 가능하다.
Interpolate : 런타임에 Ridigbody의 모션이 흔들리는 것 같을 때 부드럽게 처리하는 속성이다.
이를 처리하기 위해 두 가지 옵션을 제공한다.
- Interpolate : 이전 물리 프레임과 현재 사이 보간
- Exinterpolate : 다음 프레임을 예측해서 보간
- None : 위치 보간 없음, 고속 움직임 시 끊겨 보일 수 있다.
CollisionDetectionMode : 물리 시스템이 이 Ridigbody의 콜라이더와 씬 내의 다른 콜라이더 간의 충돌을 감지하는 방법을 정의하는 속성이다.
4가지 옵션을 제공한다.
Constraints : Rigidbody의 특정 방향 이동/회전을 고정할 수 있다.
추가적으로 Sleeping Mode라는 속성이 있는데,
이 속성은 Rigidbody2D inspector에만 보인다.
노출되지 않을 뿐 기능적으로 사용 가능하다.
이 기능은 최적화를 위한 것으로
물리적인 계산 이벤트가 없는 물체에 대해서 물리 시스템이 물리 계산에 포함하지 않도록 한다.
2D에는 이 속성을 inspector에 표기하는데 공식문서에서는 다음과 같이 설명한다.

여기까지 3D 월드의 오브젝트에 주로 쓰이는 Rigidbody에 대한 속성을 정리해 보았다.
Rigidbody 컴포넌트를 가진 오브젝트에게
힘을 가하거나 회전, 이동 등 물리적인 효과를 부여할 수 있는 메서드를 정리해보자.
아래는 힘 또는 토크를 가하는 메서드를 정리한 표다.
| 메서드 | 설명 | 사용 예 |
|---|---|---|
AddForce(Vector3 force, ForceMode mode) | 물체에 힘을 가함 | 밀기, 점프 |
AddRelativeForce(Vector3 force, ForceMode mode) | 자신의 로컬 좌표계 기준으로 힘 적용 | 로켓 추진 |
AddTorque(Vector3 torque, ForceMode mode) | 회전력(토크) 가함 | 바퀴 회전 |
AddRelativeTorque(Vector3 torque, ForceMode mode) | 로컬 회전력 적용 | 로컬 회전 방향 제어 |
AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier, ForceMode mode) | 폭발 위치 기준으로 힘을 주변 물체에 적용 | 폭탄 이펙트 |
ForceMode는Force,Impulse,VelocityChange,Acceleration네 가지 중 선택 가능하다.
Force: 부드럽고 점진적Impulse: 순간적 충격VelocityChange: 질량 무시, 즉시 속도 변화Acceleration: 질량 무시하고 일정 가속
다음으로 위치/회전 이동 관련 메서드이다.
| 메서드 | 설명 | 주의사항 |
|---|---|---|
MovePosition(Vector3 position) | Rigidbody를 물리적으로 해당 위치로 이동시킴 | isKinematic = true여야 자연스럽게 작동 |
MoveRotation(Quaternion rotation) | 물리 기반 회전 이동 수행 | 직접 회전값 조절할 때 사용 |
Sleep() | Rigidbody를 ‘수면 상태’로 강제 전환 (물리 연산 중지) | 멈춰있는 오브젝트 최적화 |
WakeUp() | 수면 상태에서 강제로 깨움 | 움직이게 하려면 호출 필요 |
IsSleeping() | 현재 수면 상태인지 여부 반환 | 상태 확인용 |
속도를 직접 제어하기 위한 속성는 다음과 같다.
| 메서드/속성 | 설명 |
|---|---|
velocity | 선속도 (Vector3). 직접 설정 가능 |
angularVelocity | 회전 속도 (Vector3, rad/s 단위). 직접 설정 가능 |
//선속도 10으로 설정하려면
rb.velocity = transform * 10f;
만일 질량 중심 및 관성을 제어하고 싶다면
centerOfMass, inertiaTensor, inertiaTensorRotatio 속성에 직접 할당해야한다.
다만 직접하면 자동 게산은 중지된다.