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