Unity입력과 물리

Rigidbody 이동 기본

물리 객체를 직접 Transform으로 옮기지 않고 `Rigidbody`를 통해 다루는 기본 이동 패턴을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
private void FixedUpdate()
{
    body.MovePosition(body.position + moveDirection * moveSpeed * Time.fixedDeltaTime);
}

설명

  • Rigidbody가 붙은 오브젝트를 물리적으로 움직일 때는 Transform보다 Rigidbody API를 우선 고려합니다.
  • 입력은 보통 Update에서 읽고, 실제 물리 이동은 FixedUpdate에서 적용하는 흐름이 안정적입니다.
  • MovePosition은 충돌 시스템과 더 잘 어울리고, 순간이동은 position 직접 설정과 성격이 다릅니다.
  • 점프나 반동처럼 힘 기반 표현이 필요하면 AddForce도 함께 이해해야 합니다.

짧은 예제

csharp
[SerializeField] private float moveSpeed = 5f;
private Rigidbody body;
private Vector3 moveDirection;

private void Awake() => body = GetComponent<Rigidbody>();

private void Update()
{
    moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).normalized;
}

private void FixedUpdate()
{
    body.MovePosition(body.position + moveDirection * moveSpeed * Time.fixedDeltaTime);
}

빠른 정리

항목설명
Rigidbody물리 계산 대상 컴포넌트
MovePosition물리 친화적 위치 이동
FixedUpdate일정 간격 물리 처리
입력 분리입력은 Update, 이동은 FixedUpdate
AddForce힘 기반 운동 표현

주의할 점

Rigidbody를 붙여 놓고 transform.position만 계속 바꾸면 충돌과 물리 결과가 부자연스러워질 수 있습니다. 오브젝트를 "물리로 움직일지, 직접 배치할지"를 먼저 정해야 합니다.

참고 링크

2 sources