+유니티 이벤트 실행 순서+
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
'Unity3D' 카테고리의 다른 글
인프런 C#과 유니티로 만드는 MMORPG 게임 개발 시리즈 정리 블로그 (0) | 2021.03.03 |
---|---|
유니티 Awake Start Update 상속 후 부모 함수 호출 방법 (0) | 2021.02.23 |
Unity3D Rigidbody의 mass, drag, angular drag 의미 및 설정 (0) | 2020.12.07 |
게임 개발 관련 리소스 참고 사이트 모음. (0) | 2020.11.20 |
Unity3d C#에서 Debug.Log 매크로 함수로 컴파일 안 되게 하기 (0) | 2020.11.05 |