Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.
한 줄 요약
Unity 생명주기 : Monobehaviour 클래스를 상속받은 클래스에서 가지는 이벤트 함수의 실행 순서 및 주기
(각각의 이벤트 함수의 호출 순서와 호출 시점이 중요)
- Unity 생명주기(Unity Life Cycle)란 Unity에서 기본 제공되는 이벤트 함수들의 실행 순서를 말한다.
- 아래의 다이어그램은 각각의 이벤트 함수들이 실행되는 순서와 어떤 처리 과정에서 호출되는지 표시한 것이다.
(출처 : Unity 공식문서 - 이벤트 함수의 실행 순서)

처음 Scene이 로드되는 시점
Awake()
- Start 함수보다 이전에 실행된다.
- 시작시 오브젝트가 비활성화 중일 경우 실행되지 않음
OnEnable()
- 오브젝트가 활성화 상태일 경우 호출
- 시작시 뿐만 아니라 활성화 될 때마다 호출됨
초기화 시점
Start()
- 인스턴스가 활성화된 이후 첫번째 프레임이 실행되기 이전에 실행됨
- 인스턴스의 초기화를 위해 사용
업데이트 순서
Update()
- 가장 기본적인 업데이트 함수
- 매 프레임마다 1번씩 실행됨
FixedUpdate()
- 기기마다 다른 프레임 속도로 인해 물리 현상 등에서 의도하지 않은 연산이 발생하는 것을 방지하기 위해 정해진 프레임으로 실행되는 업데이트 함수
- 기기 상태에 따라 실행속도가 정해지므로 Update 이전에 실행될 수도, 프레임 사이에 실행되지 않을 수도 있음
- 모든 물리효과는 FixedUpdate 후 즉시 발생(
Time.deltaTime을 곱할 필요 없음)
LateUpdate()
- Update가 끝난 후 프레임마다 1번씩 실행
- 주로 카메라의 추적 움직임을 제어할 때 사용
- 모든 움직임이 끝난 후에 카메라가 추적해야 올바른 위치를 비출 수 있기때문에
LateUpdate()에서 카메라 추적을 실행
렌더링
- 업데이트까지 마친 후에는 화면 렌더링 과정을 거친다.
- 렌더링을 마친 이후 시점이
WaitForEndOfFrame() 시점이 된다.
오브젝트 파괴
OnDestroy()
- 프레임 내에서의 모든 호출(초기화, 업데이트, 렌더링)이 끝난 후, 오브젝트 파괴 시 실행
Scene 종료
OnDisable()
- 시작시 오브젝트가 비활성화 상태이거나, 진행 중에 비활성화되었을 때 실행
OnApplicationQuit()
- 에디터 상에서는 플레이가 종료되었을 때 실행
- 애플리케이션 종료 전 모든 오브젝트에서 실행