
Unity에서 캐릭터 이동, 물리 처리, 카메라 추적, 입력 처리 같은 로직은 Update, FixedUpdate, LateUpdate 중 하나에서 처리되는데,
이 세 함수의 차이를 정확히 이해하지 못하면 카메라 떨림, 물리 오차, 입력 지연 같은 문제가 쉽게 발생한다.
그래서 오늘은 Unity에서 Update, FixedUpdate, LateUpdate가 정확히 언제 실행되고,
각각 어떤 용도로 사용해야 하는지 내부 흐름을 기준으로 정리해보려고 한다.
먼저 Unity는 프레임 단위로 반복되는 메인 루프(Main Loop) 를 기반으로 동작한다.
이 루프 안에서 입력 처리, 물리 연산, 렌더링 그리고 Update 계열 함수들이 순서대로 실행된다.

이 다이어그램을 기준으로 보면 핵심은 다음과 같다.
FixedUpdate -> 물리 연산용 고정 루프Update -> 일반 게임 로직 처리LateUpdate -> 프레임 마무리 단계이 순서를 이해하는 것이 이 글의 핵심이다.
Update 는 매 프레임마다 한 번씩 실행되는 함수이다.
즉, 현재 프레임이 60fps라면 초당 약 60번 호출되는 것이다.
void Update() { Move(); HandleInput(); }
따라서 다음과 같은 로직을 처리하는 데 적합하다.
단, Update 는 프레임 수에 따라 실행 횟수가 달라지기 때문에, 이동 처리에는 반드시 Time.deltaTime 을 곱해줘야 한다.
Update는 "시간 기준"이 아니라 "프레임 기준"으로 실행된다.
FixedUpdate 는 Update 와 달리 고정된 시간 간격으로 실행된다. (기본값: 0.02초, 초당 50회)
void FixedUpdate() { rigidbody.AddForce(Vector3.forward); }
FixedUpdate 는 사실상 물리 연산 전용 루프라고 보면 된다.

만약 물리 이동을 Update 에서 처리하면 다음과 같은 문제가 발생한다.
이 때문에 물리 로직은 반드시
FixedUpdate에서 처리해야 한다.
LateUpdate 는 해당 프레임의 모든 Update 가 끝난 뒤 가장 마지막에 실행된다.
void LateUpdate() { camera.transform.position = target.position + offset; }
이 특성 때문에 LateUpdate 는 다음 작업에 가장 적합하다.
캐릭터가 Update에서 이동한 "최종 위치"를 기준으로 카메라가 LateUpdate에서 따라가야 떨림이 발생하지 않는다.
| 구분 | Update | FixedUpdate | LateUpdate |
|---|---|---|---|
| 실행 기준 | 프레임 | 고정 시간 | 프레임 |
| 실행 순서 | 중간 | 가장 먼저 | 가장 마지막 |
| 주 용도 | 입력, 일반 로직 | 물리 연산 | 카메라, 보정 |
| Time 기준 | deltaTime | fixedDeltaTime | deltaTime |
Unity에서 Update, FixedUpdate, LateUpdate 는 역할이 명확히 분리된 실행 단계이다.
이 차이를 정확히 이해하지 못하면,
반대로 이 구조를 정확히 이해하고 적절히 쓰면, 프로젝트의 안정성과 완성도는 눈에 띄게 올라갈 것이다.