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);