FixedUpdate vs Update – 게임 물리 엔진을 제대로 이해하기
Unity로 게임을 만들다 보면 Update()
와 FixedUpdate()
두 가지가 자주 등장한다.
둘 다 “반복적으로 실행되는 함수”인데, 차이를 제대로 이해하지 않으면 캐릭터 움직임이 이상하거나 물리가 깨지는 현상이 생길 수 있다.
오늘은 Update와 FixedUpdate의 차이 그리고 왜 물리 연산은 FixedUpdate에서 해야 하는지를 깊게 살펴보자.
1. Update()란 무엇인가?
-
매 프레임마다 호출된다.
-
즉, 게임이 60FPS라면 초당 60번 호출된다.
-
FPS가 변하면 실행 횟수도 변한다.
👉 대표적인 용도: 입력 처리(Input)
→ 키보드 입력에 따라 캐릭터가 부드럽게 움직임.
2. FixedUpdate()란 무엇인가?
-
고정된 시간 간격으로 호출된다. (기본 0.02초 → 1초에 50번)
-
FPS와 관계없이 일정하게 반복된다.
-
Unity의 **물리 엔진(Physics Engine)**은 이 FixedUpdate 주기에 맞춰 동작한다.
👉 대표적인 용도: 물리 연산(Physics)
→ 중력, 충돌 같은 물리 계산은 반드시 FixedUpdate에서 다뤄야 안정적이다.
3. Update vs FixedUpdate 차이 정리
항목 | Update() | FixedUpdate() |
---|---|---|
호출 주기 | 매 프레임 | 고정 간격 (기본 0.02s) |
FPS 영향 | 받음 | 받지 않음 |
주 사용 | 입력 처리, 애니메이션 | 물리 연산, 충돌 처리 |
4. 실제 사례
-
❌ 잘못된 경우:
Update()
안에서 Rigidbody에 AddForce 적용
→ FPS에 따라 물리 계산량이 달라져, 빠른 PC에서는 더 멀리 날아가고, 느린 PC에서는 덜 날아감. -
✅ 올바른 경우:
FixedUpdate()
안에서 AddForce 적용
→ 어떤 PC에서 실행해도 같은 결과.
5. 마무리
정리하면,
-
Update() → 프레임 기반 (입력/애니메이션)
-
FixedUpdate() → 물리 기반 (충돌/중력/속도)
게임 루프 안에서 이 두 함수가 각각의 역할을 하기 때문에,
올바른 위치에 코드를 넣어야 예측 가능한 게임 동작을 만들 수 있다.
👉 다음 글에서는 **좌표계(월드 vs 로컬 좌표)**를 다뤄서, 캐릭터와 카메라 이동이 꼬이는 문제를 해결해 보겠다.
댓글
댓글 쓰기