Unity/기능

[Unity] Rigidbody - MovePosition

turbulence93 2025. 7. 1. 20:30

문제 상황

초기에는 다음과 같이 AddForce로 플레이어를 움직임:

  • Force가 남아있어 이동을 멈춰도 남아있는 포스가 없어질때까지 미끄러지듯이 이동
  • 여러행동이 동시에 일어나거나 로직이 충돌할 시 부자연스러운 움직임 발생

시도 방법

  • rigidbody의 drag 옵션을 설정해 멈춤
    • 조금 더 빠르게 멈추나 적각적인 멈춤을 구현하기에는 부적절 
  • 강제로 rigid body의 속도를 0으로 설정해 멈춤
    • 연속적인 입력이 이루어졌을때 다른 행동의 물리력도 없애버리는 현상 발생

해결 방법

  • rigid body의 MovePosition 사용
rigidbody.MovePosition(rigidbody.position + moveDir * moveSpeed * Time.fixedDeltaTime);
  • transform의 position 이동과 같이 위치 기반의 직접적인 이동방식
  • 물리 엔진과 충돌은 적용되지만, 속도나 힘이 남지 않지 않음
  • 입력이 끊기면 즉시 정지 (원하는 조작감 구현 가능)

핵심 비교 요약

항목  AddForce  MovePosition  transform.position
이동 방식 Force 적용 위치 이동 요청 위치 즉시 변경
관성 존재 여부 있음 없음 없음
충돌 감지 O O
즉시 정지 구현 어려움 (속도 남음) 가능 가능 (하지만 콜라이더를 무시함)

정리

  • Rigidbody.MovePosition은 transform.position처럼 즉시 위치를 이동시키는 방식이면서도,
    물리 충돌을 감지하고 처리해주는 안전한 이동 방식이다.
  • 이를 통해 정밀한 조작감과 즉각적인 정지, 그리고 장애물과의 자연스러운 상호작용을 모두 만족시킬 수 있다.
  • 결과적으로, 자유로운 캐릭터 이동을 구현하면서도 충돌 안정성을 유지해야 할 때는
    단순 AddForce보다 MovePosition이 훨씬 적합한 선택이다.

'Unity > 기능' 카테고리의 다른 글

[Unity] 제네릭 메서드  (0) 2025.07.07
[Unity] OverlapBox 와 OverlapBoxNonAlloc  (0) 2025.07.03
[Unity] 전역 using 사용하기  (0) 2025.06.30
[Unity] BoxCast와 OverlapBox의 차이점  (1) 2025.06.26
[Unity] StateMachineBehaviour  (0) 2025.06.25