Unity3D

Unity의 Awake Start Update 호출 순서

DragonTory 2021. 2. 9. 14:30
반응형

+유니티 이벤트 실행 순서+

Unity에서 보통 자주쓰는 메시지(이벤트) 함수의 실행 순서는 

보통

Awake()

OnEnable()

Start()

FixedUpdate()

Update()

OnApplicationQuit()

OnDisable()

OnDestroy()

게임오브젝트의 생성 로딩 부터 [앱 종료] 오브젝트 제거까지 이런 순서로 실행 된다. 

 

Awake : 게임 오브젝트가 생성 되어 시작 하는 동안 실행 된다.  생성시에 한번만 호출 됨.

  주의*) 단, 게임 오브젝트가 비활성화 되어 있게 시작 할 때는 Awake도 Start 와 마찬가지로 호출 되지 않는다. 

OnEnable : 오브젝트가 활성화 되었을 때 실행 되는 함수. 오브젝트가 비활성화 되었다 다시 활성화 될때 호출.

     : 예) 비활성화 된 오브젝트를 gameObject.SetActive(true) 하면 호출 됨. 

Start: 오브젝트의 첫번째 프레임 Update 함수 전에 한번만 실행 됨.


FixedUpdate : 물리에 관련된 움직임을 처리 할 때 사용. Update가 한번 호출 되어도 FixedUpdate는 여러번 호출 될 수 있음. 프로그램의 FPS가 낮으면 시간 경과에 따른 물리계산을 위해 FixedUpdate가 여러번 호출 됨.

Update : 매 프레임마다 처리 할 것들을 여기서 처리 하면 됨.  매 프레임 호출 됨.


OnApplicationQuit : 프로그램 종료 전 호출 됨. 

OnDisable :  오브젝트가 비활성화 될 때 호출 됨. 

     : 예) 활성화된 오브젝트를 gameObject.SetActive(false) 하면 호출 됨. 

OnDestroy : 오브젝트가 제거 될 때 마지막 Update를 마친 후 함수 호출 됨. 


< 하이어라키 계층 구조 상의 게임오브젝트간 Awake와 Start 함수 호출 순서 >

 

 

위와 같이 구조로 오브젝트가 리스트 되어 있다면 직관적으로 호출 순서가 다음과 같이 될 것 같다.

0->23->2->20->21->22->1->10->12->00

그러나 그렇게 호출 되지 않는다. 

 

 

위의 콘솔 출력 리스트를 보면 이상한 순서로 호출 됨을 알 수 있는데

이는 보이는대로의 오름차순 혹은 내림차순의 순서가 아니다.

Unity는 모든 오브젝트에 InstanceID라는 것을 부여 하고 이를 통해서 리스트를 관리 하는 듯 하다. 

위의 이미지에서 보면 Instance ID를 가지고 순차적으로 호출 됨을 알 수 있다. 

( GetInstanceID() 로 얻을 수 있음. 혹은 Editor의 인스펙터(Debug 모드) 창에서 확인 가능 )


Unity 이벤트 함수의 실행 순서

docs.unity3d.com/kr/current/Manual/ExecutionOrder.html

 

 

 

반응형