Rigidbody / AddForce / AddTorque
-
Rigidbody
- Rigidbody(강체)는 gameObject가 유니티 물리 엔진에 제어 받게 한다. 한마디로 힘과 질량을 갖고 움직일 수 있도록 하는 것이다.Mass : 오브젝트의 질량
Drag : 오브젝트가 받는 공기 저항 값
Angular Drag : 오브젝트가 토크로 회전 시 받는 공기 저항 값
Use Gravity : 중력의 영향 유무
Is Kinematic : 활성화 시 물리엔진의 제어없이 Transform으로만 조작됨
Interpolate : 오브젝트의 움직임 부드러움 옵션 처리
Collision Dectection : 오브젝트 충돌 감지 / 감지 옵션 처리
Constraints : 오브젝트의 움직임 고정위는 대표적인 rigidbody의 프로퍼티이다.Unity Documentation에서는 힘의 사용 여부에 따른 Transform과 RigidBody 조작 차이가 크므로 한 오브젝트에서 Transform과 RigidBody 둘 중 하나만을 조작하기를 권한다. -
AddForce()
- rigidbody의 가장 대표적인 메소드인 AddForce이다. 인자로 Vector3을 주고 힘을 곱하는 것으로 오브젝트의 rigidbody에 힘을 추가한다.rb = GetComponent (); rb.AddForce(new Vector3(0, 1, 0)*100) 힘을 주어 오브젝트가 해당 방향으로 날아가게 만든다. 처음에는 이것으로 캐릭터가 점프하도록 만들었으나, 문제가 생길 것이다.캐릭터가 똑바로 서 있는 상황에서는 위처럼 y축으로 힘을 가하는 것이 맞다. 하지만 이 방향은 global 좌표 기준이기 때문에 캐릭터의 방향과 상관없이 y축으로 움직이게 만든다. 예를 들어 캐릭터가 옆으로 누워있는 상황에서는 의도와 맞지 않게 옆으로 하늘을 향해 껑충 뛰게 되는 것이다.캐릭터가 항상 머리 방향으로, 즉 local 좌표로 힘을 가하고 싶다면 AddRelativeForce()를 사용하면 된다.rb.AddRelativeForce(new Vector3(0, 1, 0)*100); 이번에는 캐릭터가 누워있는 상황이라면 역시 부자연스럽지만 머리쪽으로 캐릭터가 움직이는 것을 확인 할 수 있을 것이다. -
AddTorque()
- AddForce와 마찬가지로 AddTorque는 Rigidbody에 토크를 추가한다. 역시 인자로 Vector3을 받아 해당 방향을 축으로 회전한다.rb = GetComponent (); rb.AddTorque(new Vector3(0, 1, 0) * 100); addForce와 같이 global 기준이고, 역시 마찬가지로 AddRelativeTorque를 이용하여 local 좌표를 축으로 회전 시킬 수 있다.rb.AddRelativeTorque(new Vector3(0, 1, 0) * 100);