1. 오늘 주제
오늘은 수준별 학습 과제에서 유니티 개발하면서 생각해 볼만한 문제가 나왔었는데, 여러가지 생각해보다가 스크립트 생명주기에 대해 한번쯤은 짚어보고 넘어가는게 좋을 것 같아서 작성해본다.
2. 실행 순서
우리가 흔히 사용하는 Component 스크립트가 어떤식으로 시작되고 어떻게 파괴되는지 알아야 개발하면서 에러를 발생시키지 않을 수 있기때문에 반드시 숙지할 필요가 있다.

3. 중요한 함수들
- 스크립트의 최우선 실행 함수는 Awake 함수이며, 주로 변수 초기화 할때 많이 사용한다. 특징으로는 비활성 상태에서도 한번은 실행한다.
- OnEnable 함수는 오브젝트가 활성 상태가 될때마다 실행된다. 비활성 상태로 전환 후 다시 활성상태로 변경해도 실행하게 된다.
- Start 함수는 오브젝트가 활성화된 후 첫번째 프레임에서 딱 한번만 호출한다. 특징으로는 다른 컴포넌트들이 모두 초기화 된 후에 실행되는 특징이 있다. Awake와 비슷한 것 같지만 게임 시작시 한 번만 호출 된다는 점이 다르다.
- FixedUpdate 함수는 고정된 시간 간격마다 호출하며, 물리 연산시에 주로 사용된다. 일정 시간을 주기로 호출하기 때문에 Rigidbody 같은 물리적 동작을 제어하는데 적합하다.
- Update 함수는 매 프레임마다 호출한다. 주로 사용자 입력이나 게임 로직을 처리하는데 사용되는데 캐릭터의 움직임 처리할 때나 실시간으로 데이터를 처리할 때 사용한다.
- LateUpdate 함수는 Update가 실행 후 프레임마다 호출되는 함수이다. Update에서 처리하고난 이후에 후처리 로직이 필요할때 사용하게 된다. 주로 사용하는 곳은 카메라의 움직임을 오브젝트에 맞추거나 오브젝트의 업데이트가 끝난 후 조정을 할때 사용한다.
- OnDisable 함수는 오브젝트가 비활성 상태로 전환할때 사용한다. 주로 이벤트 리스너 제거나 정리 작업에 사용한다. OnEnable과 반대로 동작하는 것이 특징이다.
- OnDestroy 함수는 오브젝트가 씬에서 삭제되거나 씬이 변경 될때 호출한다. 자원을 해제하는 경우에 사용한다. 사용중인 리소스를 해제 할때 사용한다.
MonoBegavior 스크립트의 전체 흐름
- Awake() → OnEnable() (오브젝트 활성화 시) → Start() (첫 프레임에서 딱 한 번만)
- (프레임마다) FixedUpdate() → Update() → LateUpdate()
- OnDisable() (오브젝트 비활성화 시)
- OnDestroy() (오브젝트 삭제 시)
지금처럼 전반적인 흐름을 파악해두면 개발하는데 꼬이는 일이 없다!