유니티 FixedUpdate(), Update(), LateUpdate()의 차이와 활용법 - CCGrape
생명주기(Lifecycle)에서 반복해서 실행되는 메서드 FixedUpdate(), Update(), LateUpdate()에 대해서 알아봅니다.
목차
Step 0. 서론
Step 1. FixedUpdate()
Step 2. Update()
Step 3. LateUpdate()
Step 4. 차이점 요약
Step 5. 활용 시 주의사항
Step 0. 서론
저번 [생명주기(Lifecycle) 포스팅]에서는 기초에 중점을 두었기 때문에 반복되는 메서드는 Update()만 다루었습니다. 이번 포스팅에서는 Update() 만큼 중요한 FixedUpdate()와 LateUpdate()까지 학습하도록 하겠습니다.
유니티에서 게임 오브젝트의 동작을 제어하는 스크립트는 주로 FixedUpdate(), Update(), LateUpdate() 메서드를 통해 이루어집니다. 이 메서드들은 각각 게임 오브젝트의 상태를 업데이트하는 데 사용되지만, 그 실행 시점과 목적이 다릅니다.
이번 포스팅에서는 이 세 가지 메서드를 생명주기(Lifecycle) 순서에 따라 자세히 설명하겠습니다.
다음 이미지는 생명주기(Lifecycle) 중 세 가지 메서드 관련 부분입니다. 
Step 1. FixedUpdate()
- 정의
FixedUpdate()메서드는 물리 연산(Physics)과 관련된 작업에 사용됩니다.- 고정된 시간 간격(default 0.02초)마다 호출되며, 프레임 레이트와 무관하게 일정한 주기로 실행됩니다.
- 고정된 시간 간격 수정 방법 : Edit → Project Setting → Time → Fixed TimeStep
- 활용
- 물리적인 힘 적용이나 속도, 중력 등과 같은
물리 연산을 처리하는 데 사용됩니다. - 물리 엔진은 일정한 시간 간격을 기준으로 연산되므로, 이 메서드에 물리 관련 코드를 작성해야 정확한 물리 시뮬레이션이 가능합니다.
- 물리적인 힘 적용이나 속도, 중력 등과 같은
- 코드 예시
1 2 3 4 5
void FixedUpdate() { // 물리적인 힘을 적용 Rigidbody rb = GetComponent<Rigidbody>(); rb.AddForce(Vector3.forward * force); }
Time.timeScale == 0 이면 Physics Loop가 실행되지 않습니다.
=> FixedUpdate() 실행 안됨.
Step 2. Update()
- 정의
Update()메서드는 매 프레임(frame)마다 호출됩니다.- 게임의 프레임 레이트(frame rate)에 따라 호출 빈도가 달라질 수 있으며, 화면의 새로고침 주기와 일치합니다.
- 활용
- 주로 게임의 메인 로직, 사용자 입력 처리, 오브젝트의 상태 업데이트 등에 사용됩니다.
- 예) 사용자의 입력에 따라 캐릭터를 이동, 애니메이션 실행 로직.
- 프레임 기반으로 실행되므로 실시간 상호작용이 중요한 경우에 적합합니다.
- 주로 게임의 메인 로직, 사용자 입력 처리, 오브젝트의 상태 업데이트 등에 사용됩니다.
- 코드 예시
1 2 3 4 5
void Update() { // 캐릭터 이동 처리 float move = Input.GetAxis("Horizontal") * speed * Time.deltaTime; transform.Translate(move, 0, 0); }
Step 3. LateUpdate()
- 정의
LateUpdate()메서드는Update()가 모두 실행된 후에 호출됩니다.- 주로 카메라의 위치를 업데이트하거나 다른 오브젝트의 움직임을 따라가야 하는 경우에 유용합니다.
- 활용
- 주로 다른 오브젝트가 이동한 후 그 위치에 따라 카메라를 이동시키는 데 사용됩니다.
- 예를 들어, 캐릭터가 이동한 후 카메라가 해당 캐릭터를 따라가는 로직을 작성할 수 있습니다.
Update()가 끝난 후 실행되므로, 오브젝트 간의 상호작용이 완료된 후에 추가적으로 처리할 로직을 넣기에 적합합니다.
- 주로 다른 오브젝트가 이동한 후 그 위치에 따라 카메라를 이동시키는 데 사용됩니다.
- 코드 예시
1 2 3 4 5
void LateUpdate() { // 캐릭터를 따라가는 카메라 위치 업데이트 Vector3 newPosition = player.transform.position + offset; transform.position = newPosition; }
- 캐릭터를 따라가는 카메라 구현 영상

Step 4. 차이점 요약
- Update()
- 호출 주기 : 매 프레임마다 호출
- 주 사용 용도 : 게임 로직, 사용자 입력 처리
- 주의점 : 프레임 레이트에 따라 호출 빈도가 달라질 수 있음
- FixedUpdate()
- 호출 주기 : 고정된 시간 간격마다 호출
- 주 사용 용도 : 물리 연산 처리
- 주의점 : 일정한 주기로 호출되며, 물리 연산의 정확성 보장
- LateUpdate()
- 호출 주기 : Update() 이후에 호출
- 주 사용 용도 : 카메라 위치 업데이트, 후처리 로직
- 주의점 : Update() 이후 실행되므로 오브젝트의 최종 상태에 접근 가능
Step 5. 활용 시 주의사항
- 효율적인 처리
- 불필요한 연산을 피하기 위해
FixedUpdate()와Update()의 역할을 명확히 구분해야 합니다. - 물리 연산이 아닌 코드는
Update()에서 처리하는 것이 성능상 유리합니다.
- 불필요한 연산을 피하기 위해
FixedUpdate()와 Update()의 다른 연산 주기
앞서 말씀드렸다시피 두 메서드의 연산 주기가 다릅니다. 이로 인해 발생하는 문제를 방지하기 위해 특정 변수를FixedUpdate()와Update()에서 동시에 사용하지 않도록 주의해야 합니다.
따라서 물리 연산과 관련한 것들은 FixedUpdate()에 구현하고 그 외 게임로직에 대한 것은 Update()에 구현하는 것이 좋습니다.
포스팅의 예시로 사용된 게임을 플레이하고 싶으신 분들은 스토어에 bunnybunny를 검색하시거나 해당 스토어 이미지를 클릭해 주세요~!
이만 포스팅을 마치겠습니다.
감사합니다.



