
그동안 Unty를 다루면서,
가볍게 짚고 넘어간 실행 사이클에 대해서 분석과 정리를 해보자.
Unity 문서를 참고할 것이며 추가적인 내용은 웹에서 더 찾아서 정리해 볼 것이다.
Unity에서는 MonoBehaviour를 상속한 스크립트 컴포넌트가 특정 이벤트 함수를 통해 자동으로 호출된다.
이 함수들은 Unity 엔진이 오브젝트의 상태 변화나 프레임에 따라 호출하는 일종의 콜백 메서드다.
스크립트를 새로 생성하면 바로 보이는 Start()와 Update() 함수가 이에 해당한다.
하지만 그 외에도 무척 많은데,
이 기회에 한 번 다 짚고 넘어 가보자
아래는 Unity 메뉴얼에서 제공하는 스크립트 라이브사이클 플로우 차트다.

위 플로우에 따라서 하나 하나 분석 및 정리 해보자.
🔹Awake()
🔹 OnEnable()
🔹 Reset()

🔹start()
🔹 FixedUpdate()
| 단계 | 설명 |
|---|---|
| State Machine update | Animator Controller의 현재 상태(State) 갱신 |
OnStateMachineEnter/Exit() | 상태 진입/이탈 시 콜백 |
| ProcessGraph | 모든 애니메이션 그래프를 평가, 여기에는 평가할 모든 애니메이션 클립에 대한 샘플링과 루트 모션 계산이 포함 |
Fire animation events | 애니메이션에 지정된 이벤트 호출 (예: AnimationEvent) |
StateMachineBehaviour callbacks | 애니메이션 스테이트에 붙은 사용자 정의 스크립트 실행, 이 콜백을 정의하는StateMachineBehaviour 이 포함된 각 활성 상태에 대해 호출 |
OnAnimatorMove() | 업데이트 프레임마다 루트 모션을 수정할 수 있도록 각 Animator 컴포넌트에 대해 한 번 호출, Root Motion을 사용하는 경우, 움직임 벡터를 가져오는 곳 |
이 시점까지는 애니메이션 데이터 기반으로 움식임 계산만 이뤄진다.
| 단계 | 설명 |
|---|---|
| ProcessAnimation | 앞서 계산된 애니메이션 그래프의 결과를 블렌딩한다. |
OnAnimatorIK(int layerIndex) | 애니메이션 IK를 설정한다. IK pass가 활성화된 각 애니메이터 컨트롤러 레이어에 대해 한 번 호출한다. |
| WriteTransform | 모든 애니메이션화된 트랜스폼을 워커 스레드에서 씬에 작성한다. |
| WriteProperties | 다른 모든 애니메이션화된 프로퍼티를 메인 스레드에서 씬에 작성 |
🔹 OnTriggerEnter/stay/Exit()
🔹 OnCollisionEnter/stay/Exit()
OnTriggerEnter/stay/Exit(),OnCollisionEnter/stay/Exit()
FixedUpdate 루프의 가장 마지막에 실행되며,
충돌 감지를 완료한 뒤에야 반응 로직이 실행됨.
🔹 yield WaitForFixedUpdate
🔹 OnMouseDown/Over/UP
🔹 Update()
🔹 yield return 객체
🔹 LateUpdate()

위에서 정리하였기에 넘어가겠다.
이 단계는 비주얼 이펙트, 후처리, 커스텀 렌더링 관련 작업 시 중요하다.
| 메서드 | 설명 |
|---|---|
OnPreCull() | 카메라가 씬을 잘라내기 전에 호출 |
OnWillRenderObject() | 오브젝트가 렌더링 대상일 때 호출 |
OnRenderObject() | 오브젝트 렌더링 시점 |
OnPostRender() | 렌더링이 완료된 직후 |
OnRenderImage() | 이미지 효과 후처리 (후처리 필터) |
OnGUI()는 새로운 UI 시스템인UI Toolkit, UGUI 이후 잘 안 쓰지만
디버깅용 인터페이스에 유용할 수 있음
OnDrawGizmos() | 에디터에서 Gizmo 그릴 때 호출 |
|---|---|
OnGUI() | 매 프레임마다 여러 번 호출됨 (Immediate Mode GUI용) |
🔹 yield WaitForEndOfFrame
🔹 OnApplicationPause()
보통 이 단계에서 리소스 해제, 네트워크 연결 종료, 상태 저장 등을 처리한다.
🔹 OnApplicationQuit()
🔹 OnDisable()
🔹 OnDestroy()
지금까지 실행 사이클 하나 하나 살펴보았다
이제 전체적인 흐름으로 다시 정리 이해를 굳혀보자
[에디터 단계]
→ Reset()
[초기화]
→ Awake() → OnEnable() → Start()
[게임 루프]
┌→ FixedUpdate()
│ → 물리 처리 / 충돌 / RootMotion
│
└→ Update()
→ 일반 게임 로직
→ yield 등 코루틴 재개
→ LateUpdate() → 후처리
[렌더링 + 후처리]
→ OnRenderObject() 등
[일시정지 / 종료]
→ OnApplicationPause()
→ OnDisable()
→ OnDestroy()
위 정리를 통해 오늘 얻은 인사이트를 정리해 보았다.
이 과정들을 통해 게임 개발에 있어서
지금까지 나무를 보고 막연하게 개발을 했었던 것 같다.
좀 더 넓은 시야를 가지고 개발에 임할 수 있게 된 것 같다.
이걸로 오늘의 회고를 대신하겠다(하하하하)