Enemy를 오브젝트 풀에서 가져다 쓰면서 Enemy 오브젝트의 활성화/비활성화(SetActive(true/false))가 반복되는 과정에서 여러 스크립트의 Awake, OnEnable, Start에서 작성한 코드가 매우 복잡하게 꼬이게 되는 것을 느꼈다. 그래서 오브젝트가 활성화될 때, Awake, OnEnable, Start가 어떻게 동작하는지 알아보았다.
항상 Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출된다.
게임 오브젝트가 시작하는 동안 비활성 상태(SetActive(false))인 경우 Awake 함수는 활성화될 때까지 호출되지 않는다. 스크립트 컴포넌트가 비활성화된 상태(enabled = false)에서도 Awake는 실행되기 때문에 기본적으로 초기화 되어야 하는 부분을 Awake에서 작성한다.
요약: 오브젝트가 최초로 활성화될 때 한 번 호출
오브젝트와 스크립트 컴포넌트가 모두 활성화된 직후에 이 함수를 호출한다. 활성화될 때마다 호출된다. 오브젝트 풀링을 활용하여 오브젝트를 활성화할 때마다 초기화가 필요한 필드는 OnEnable에서 작성한다.
오브젝트와 스크립트가 최초로 활성화된 후 첫 프레임 업데이트 전에 한 번 호출된다.
필드의 초기화가 필요한 시점이 언제인지 구분하여 Awake, OnEnable, Start를 사용해야 한다.