unity 공식 메뉴얼에는 MonoBehaviour 의 수많은 콜백함수 종류와 각각이 호출 되는 시점을 알 수 있다.
이 중 자주 사용되는 콜백들의 라이프사이클은 아래와 같다.
Reset
유니티 에디터에서 오브젝트 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행된다.
객체의 속성을 초기 값으로 설정해 줄 때 사용한다.
Awake
프리팹이 인스턴스화 한 직후, 스크립트가 호출되자마자 오브젝트 활성화 여부와 상관없이 실행 된다.
모든 오브젝트가 초기화 된 후 호출되기 때문에 GameObject.Find 같은 명령문을 안전하게 사용할 수 있다.
Awake 함수는 언제나 Start 함수 전에 호출되는 점에 주의. (StartCoroutine 을 사용할 수 없다.)
OnEnable
다른 초기화 함수와 달리 하나의 라이프 사이클 내에서 여러번 호출 될 수 있다.
인스펙터뷰에서 체크 및 스크립트 내에서 SetActive 함수로 게임 오브젝트를 활성화 할 때마다 호출 된다.
Start
Update 함수가 호출되기 전에 한번만 호출된다.
다른 스크립트의 모든 Awake가 모두 실행된 이후에 실행되며 Awake와 달리 오브젝트가 활성화 되어 있어야 호출 된다.
Awake 이후 호출되므로 예를들어 A 객체의 Awake 함수에서 동적 생성한 멤버를 B객체의 Awake 함수에서 접근할 경우 오브젝트 들의 Awake 함수 호출 순서는 임의로 정할 수 없으므로 B객체의 Awake 가 먼저 호출 되어 NullReferenceExecption 을 발생 시킬 수 있다.
이럴 경우 동적 생성은 Awake 에서 하고 동적 생성되는 멤버에 접근하는 초기화 코드는 항상 Awake 이후로 보장되는 Start 에 넣는 것이 좋다.
FixedUpdate
프레임과 상관없이 무조건 시간 기준(default 0.02초. 변경 가능)으로 호출 되는 Update 콜백이기 때문에 주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가하거나 체크할 때 사용한다.
프레임 속도가 기준 시간 속도보다 오래 걸릴 정도로 느려질 경우 한 프레임에서 여러번 호출 될 수 있다.
Update
매 프레임마다 호출되는 가장 일반적인 Update 함수.
오브젝트가 활성화 되어 있어야 호출 되며 프레임 단위이기에 호출 시간 간격은 프레임에 따라 변한다.
LateUpdate
모든 Update 계열 콜백들이 실행되고 나서 호출된다.
Update 함수에서 캐릭터를 이동 시킨 후 LastUpdate에서 캐릭터의 좌표를 추적해 카메라의 좌표를 이동시키는 등의 경우에 사용한다.
OnDisable
게임 오브젝트 또는 스크립트가 비 활성화 되었을 때 호출된다. (StartCoroutine 사용 불가)
OnDestroy
해당 오브젝트가 파괴 되기 전 프레임의 Update 함수 실행 후 호출 된다.
일반적으로 라이프 사이클 내에서 사용한 자원들을 돌려 놓는 작업을 이곳에서 하게 된다.
OnApplicationQuit
앱이 종료 되기 직전에 모든 오브젝트에서 호출된다.
에디터에서는 플레이 모드 중지할 때 호출 된다.