Unity/초보자가 알면 좋을 팁

유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 4

추운날_너를_기다리며 2026. 3. 3. 16:23

꿀팁 3에서 Rigidbody라면 Update에서 이동하면 안 되나? 의 물음을 여기다 적겠습니다.

왜 ❗ Rigidbody라면 Update에서 이동하면 안 되나?

핵심은 이것이다:

물리는 FixedUpdate 타이밍에만 계산된다.


1️⃣ Unity 내부 동작 원리

Unity는 이렇게 동작한다:

FixedUpdate → 물리 계산
Update → 게임 로직
LateUpdate → 후처리
렌더링
 

Rigidbody가 붙어있으면:

  • 위치
  • 속도
  • 충돌 판정

이 모든 것이 FixedUpdate 주기 기준으로 계산된다.


2️⃣ Update에서 transform 이동을 하면 생기는 문제

예를 들어:

 
void Update()
{
    transform.position += move * speed * Time.deltaTime;
}

이렇게 Rigidbody가 있는 오브젝트를 직접 움직이면:

❌ 문제 1: 물리엔진이 모름

물리엔진은 "내가 계산해서 움직였다"고 생각하지 않는다.

→ 충돌 판정이 어긋날 수 있음
→ 관통 발생 가능

❌ 문제 2: 프레임 의존성

Update는 프레임 기반이라:

  • 60fps → 60번 이동
  • 30fps → 30번 이동

물리 연산은 50Hz(기본 0.02초) 기준인데
이게 서로 타이밍이 안 맞는다.

→ 위치가 미세하게 어긋남
→ 충돌이 불안정해짐

❌ 문제 3: 카메라 떨림

Update에서 이동
FixedUpdate에서 물리 보정
LateUpdate에서 카메라 추적

→ 프레임 순서 엇갈리면
→ 카메라가 1프레임 밀림
→ “덜컥거리는 느낌” 발생


3️⃣ Rigidbody는 어떻게 움직여야 하냐?

✅ 방법 1 — velocity 설정

 
void FixedUpdate()
{
    rb.velocity = move * speed;
}

 

✅ 방법 2 — MovePosition

void FixedUpdate()
{
    rb.MovePosition(rb.position + move * speed * Time.fixedDeltaTime);
}

이렇게 해야:

  • 충돌 감지 정상 작동
  • 관통 없음
  • 보간(interpolation) 정상 작동
  • 네트워크 보정 쉬움

4️⃣ 그럼 Update에서는 뭘 하냐?

Update는 입력 저장만 한다

 
void Update()
{
    inputDir = new Vector2(
        Input.GetAxis("Horizontal"),
        Input.GetAxis("Vertical")
    );
}
 

그리고

 
void FixedUpdate()
{
    Move(inputDir);
}
 

이게 올바른 구조다.


5️⃣ 쉽게 비유하면

  • Update = 플레이어가 “가!”라고 말하는 단계
  • FixedUpdate = 실제로 다리가 움직이는 단계
  • LateUpdate = 카메라가 따라오는 단계

Update에서 바로 움직이면
"입으로 말하면서 동시에 다리까지 강제로 끌고 가는 것"과 같다.


6️⃣ 그럼 Rigidbody 안 쓰면?

그럼 Update에서 이동해도 된다.

 
transform.position += move * Time.deltaTime;
 

왜냐하면:

  • 물리엔진을 안 쓰니까
  • 충돌도 직접 처리하거나
  • CharacterController 쓰는 구조라면 Update에서 이동하는 게 정상

🎯 MMORPG 기준으로 보면

보통 캐릭터는:

  • Rigidbody 기반이면 → FixedUpdate 이동
  • CharacterController면 → Update 이동

요즘 MMORPG는:

  • 물리 기반이 아니라
  • 서버 authoritative 구조 + CharacterController 기반이 많다

그래서 Update에서 이동하는 게임도 많다.


📌 결론

“❗ 절대 이동하지 않음 (Rigidbody라면)” 이라는 말은

Rigidbody는 물리엔진 소유권이 있기 때문에
Update에서 transform을 직접 건드리면 물리 질서가 깨진다

라는 의미다.