꿀팁 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을 직접 건드리면 물리 질서가 깨진다
라는 의미다.
'Unity > 초보자가 알면 좋을 팁' 카테고리의 다른 글
| LateUpdate에 캐릭터 이동을 넣지 않는 이유에 대하여 (0) | 2026.03.03 |
|---|---|
| Unity 기본 아키텍쳐 흐름은 이해해보자 - Rigidbody, Update, LateUpdate, FixedUpdate (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 3 (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 2 (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 1 (0) | 2026.03.03 |