실제 물리학에서 리지드바디는 물리적인 힘에 의해 변형되거나 형태가 변하지 않는 모든 물리적 물체를 말합니다. 리지드바디의 특정 두 지점 간의 거리는 리지드바디에 가해지는 외부 힘에 관계없이 시간에 따라 일정하게 유지됩니다.
움직임, 중력, 충돌, 조인트와 같은 물리 기반 동작을 시뮬레이션하려면 씬의 항목을 리지드바디로 구성해야 합니다. Unity의 PhysX 시스템에서 게임 오브젝트를 리지드바디로 설정하려면 게임 오브젝트에 Rigidbody 컴포넌트를 할당합니다. Rigidbody 컴포넌트는 API에서 Rigidbody 클래스로 표시됩니다.
Unity에서 Rigidbody 컴포넌트는 게임 오브젝트의 움직임과 위치를 물리 기반으로 제어하는 방법을 제공합니다. Transform 프로퍼티 대신 시뮬레이션된 물리 힘과 토크를 사용하여 게임 오브젝트를 움직이고 물리 엔진이 결과를 계산하도록 할 수 있습니다.
대부분의 경우 게임 오브젝트에 리지드바디가 있는 경우 Transform 프로퍼티 대신 Rigidbody 프로퍼티를 사용하여 게임 오브젝트를 움직여야 합니다. Rigidbody 프로퍼티는 물리 시스템의 힘과 토크를 적용하여 게임 오브젝트의 트랜스폼을 변경합니다. 그런 다음 트랜스폼을 직접 변경하면 Unity가 물리 시뮬레이션을 올바르게 계산할 수 없으며 원치 않는 동작이 발생할 수 있습니다. 이것은 특히 조인트가 있는 리지드바디에 적용됩니다.
Unity는 로컬이 아닌 전역적으로 물리 기반 움직임을 처리합니다. 리지드바디가 있는 게임 오브젝트가 물리 기반 움직임을 통해 이동하면 부모 또는 자식 게임 오브젝트와는 독립적으로 움직입니다. 리지드바디가 있는 자식 게임 오브젝트는 여전히 부모 게임 오브젝트를 사용하여 초기화용 로컬 위치를 정의하지만, Unity는 전역 공간에서 물리 기반 움직임을 계산합니다.
스크립트를 통해 리지드바디를 제어하기 위해 기본 클래스는 AddForce(게임 오브젝트에 힘을 추가) 및 AddTorque(게임 오브젝트에 토크를 적용)입니다.
물리 시스템이 게임 오브젝트를 감지하지만 제어하지 않는 경우가 있습니다. 예를 들어, 콜라이더가 게임 오브젝트를 감지하도록 하되, 해당 게임 오브젝트의 움직임과 위치를 해당 게임 오브젝트의 트랜스폼을 통해 제어하려고 할 수 있습니다.
물리 기반이 아닌 Unity의 움직임을 키네마틱 모션이라고 합니다. Rigidbody 컴포넌트에는 연결된 게임 오브젝트를 물리 기반이 아닌 것으로 정의하고 물리 엔진의 제어에서 제거하는 Is Kinematic 프로퍼티가 있습니다. 이를 통해 Unity의 물리 시뮬레이션 계산이 변경 사항을 오버라이드하지 않고도 트랜스폼을 통해 운동역학적으로 움직이게 할 수 있습니다.
키네마틱 리지드바디는 물리 기반 리지드바디 게임 오브젝트에 물리 기반 힘을 적용할 수 있지만 물리 기반 힘을 받지는 않습니다. 예를 들어 키네마틱 리지드바디는 물리 기반 움직임이 있는 리지드바디와 충돌하고 밀 수 있지만, 물리 기반 움직임이 있는 리지드바디는 키네마틱 리지드바디를 밀 수 없습니다.
키네마틱 리지드바디를 비키네마틱 리지드바디에 연결하기 위해 조인트를 사용하는 경우, 조인트는 키네마틱 리지드바디를 움직이기 위해 힘을 가할 수 없습니다. 비키네마틱 리지드바디만 움직일 수 있습니다. 하지만 트랜스폼을 통해 키네마틱 리지드바디를 움직이게 할 수 있으며, 조인트는 비키네마틱 바디의 포즈를 조정하여 조인트 한계를 충족시킬 수 있습니다.
리지드바디가 Sleep Threshold보다 느리게 움직이는 경우(Physics Project Settings 참조) Unity는 리지드바디를 ’휴면’으로 설정합니다. 즉 물리 시스템이 해당 리지드바디를 물리 계산에 포함하지 않습니다. 휴면 리지드바디가 충돌하거나 힘을 받으면 Unity는 리지드바디를 ‘깨워’ 물리 계산에 계속 포함합니다.
기본적으로 Rigidbody 컴포넌트의 휴면 및 각성은 자동으로 수행됩니다. 그러나 스크립트에서 Rigidbody.Sleep 및 Rigidbody.WakeUp 메서드를 통해 이러한 동작을 직접 제어할 수도 있습니다.
리지드바디는 물리 시스템 대신 트랜스폼 위치를 통해 움직이는 정적 콜라이더(즉, 리지드바디가 없는 콜라이더)의 움직임과 충돌에 반응하여 깨어나지 못할 수 있습니다. 특히 물리 시스템이 정적 콜라이더를 더 이상 감지할 수 없는 경우에 그럴 수 있습니다. 이 경우 Rigidbody.WakeUp을 사용하여 휴면 리지드바디를 깨울 수 있습니다.
PhysX 물리 시스템이 휴면을 처리하는 방법에 대한 자세한 내용은 휴면에 대한 NVIDIA PhysX SDK 리지드바디 역학 기술 자료를 참조하십시오.