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를 사용하는 것이 좋다.
이번 핛습을 통해 두 방식의 명확한 차이점을 알게 되었고, 다양한 상황에서 적절한 대응 코드를 구현할 수 있을 것 같다.
'Unity > 기능' 카테고리의 다른 글
| [Unity] Indexof - 배열 내 특정 요소의 위치 찾기 (0) | 2025.05.29 |
|---|---|
| [Unity] eulerAngles와 rotation 차이점 (0) | 2025.05.28 |
| [Unity] Getter와 반환 매서드의 차이점 (0) | 2025.05.26 |
| [Unity] NavMesh - SamplePosition (0) | 2025.05.23 |
| [Unity] 유니티 오브젝트의 법선백터 계산 기준 (0) | 2025.05.22 |