Unity/기능

[Unity] Rigidbody의 velocity와 AddForce 차이점

turbulence93 2025. 5. 27. 20:30

1. 의문점

물리 기반 오브젝트의 이동을 구현할 때 velocity addForce를 통해 구현이 가능한데,
각 방식이 어떻게 동작하는지, 그리고 어떤 차이점이 있는지 명확히 알고 싶었졌다.


2. 원리 및 개념 정리

rigidbody.velocity

  • Rigidbody의 속도를 직접 설정하는 방식.
  • 기존의 물리 계산을 무시하고 즉시 적용됨.
  • 외부에서 힘을 받아 이동 중인 오브젝트라도, velocity를 설정하면 그 순간 모든 힘을 덮어쓰기 때문에 예측 가능한 동작을 만들 수 있음.
  • 주로 즉각적인 이동, 컨트롤이 중요한 캐릭터 조작 등에 사용.
rb.velocity = new Vector3(5f, rb.velocity.y, 0f); //x축을 5의 속도로 일정하게 움직인다.

※ 속도를 직접 덮어 쓰는 방식이기 때문에 점프 동작이 들어간다면 y축의 힘을 0으로 초기화 하지 않도록 주의한다.


rigidbody.AddForce

  • Rigidbody에 물리적인 힘을 가하는 방식.
  • 물리 시스템에 따라 점진적으로 속도가 누적되며 가속이 생김.
  • ForceMode에 따라 힘의 적용 방식이 달라짐:
    • Force: 점진적인 힘 가중 (가속)
    • Impulse: 순간적인 큰 힘 (점프 등)
    • VelocityChange: 질량 무시하고 즉시 속도 변화
    • Acceleration: 질량 반영 없이 힘 누적
rb.AddForce(Vector3.up * 5f, ForceMode.Impulse); //5의 힘을 순간적으로 적용하여 점프효과 처리

rb.AddForce(Vector3.foward * 5f); //5의 힘이 계속해서 누적됌. 차량의 가속 표현에 적합

3. 실제 적용 및 선택 기준


구분 velocity AddForce
직접적인 속도 제어
물리 기반 반응
캐릭터 이동, 방향 전환
점프, 밀침, 반동
외부 힘 무시하고 제어
가속 감 있는 자연스러운 움직임

4. 느낀점

AddForce로 이동을 구현하면 키보드에서 손을 뗏을때 힘이 남아있어 미끄러듯이 멈추게 된다.
Velocity로 가속을 구현하게 되면 5, 10, 15 이런식으로 속도가 뚝뚝 끊겨서 올라가기 때문에 부자연스러운 느낌을 줄 수 있다.

그렇기 때문에 정밀한 이동이 필요하다면 velociry를, 자연러스러운 가감속을 표현하고 싶으면 AddForce를 사용하는 것이 좋다.
이번 핛습을 통해 두 방식의 명확한 차이점을 알게 되었고, 다양한 상황에서 적절한 대응 코드를 구현할 수 있을 것 같다.