흔히들 유니티 라이프 사이클에 대해서 물어보면
Awake->OnEnable(오브젝트 활성화 시)->Start->FixedUpdate->Update . . . .
이런식으로 기본적인 호출 순서에 대해서만 알고들 있기에 유니티 라이프 사이클을 한번 정리해 보았다.
큰 분류로는
01. Editor
02. Initialization
03. Physics
04. Input events
05. Game logic
06. Scene rendering
07. Gizmo randering
08. GUI rendering
09. End of frame
10. Pausing
11. Disable/enable
12 Decommissioning
이렇게 12가지로 나뉘게 된다.
# Editor
1. Reset
- 에디터에서 제일 처음 스크립트를 초기화하는데 호출한다.
# Initialization
1. Awake
- 스크립트가 생성될 때 맨 처음 단 한 번 호출되는 초기화 함수다.
- 스크립트가 비활성화된 상태로 생성되더라도 호출된다.
2. OnEnable
- 스크립트가 활성화 되어 있을 때, 오브젝트가 활성화 될 때마다 호출되는 함수다.
- 즉, 오브젝트를 껐다가 켤때마다 호출된다.
3. Start
- Awake와 OnEnable 이후에 단 한 번 호출되는 시작 함수다.
- Awake와는 호출되는 타이밍이 다르며 스크립트가 활성화가 되어 있어야 호출된다.
- 스크립트의 인스턴스가 활성화되면 첫 번째 프레임의 업데이트 전에 호출된다.
# Physics
1. FixedUpdate
- 일정한 주기로 매번 호출되는 Update함수다.
- 프로젝트 셋팅에서 해당 주기를 설정할 수 있으며 물리적인 계산을 위해 사용한다.
2. WaitForFixedUpdate
- FixedUpdate가 호출된 후에 Coroutine 함수에서 yield 명령문을 통해 호출된다.
3. OnTriggerXXX
- 충돌 처리를 위해 호출되는 함수로 Collider의 IsTrigger가 체크되어 있을 때 충돌이 발생하면 호출된다.
- OnTriggerEnter, OnTriggerStay, OnTriggerExit 등이있다.
- OnTriggerEnter는 충돌되었을 때 한번 호출한다.
- OnTriggerStay는 충돌되었을 때부터 충돌에서 빠져나오기 전까지 계속 호출된다.
- OnTriggerExit는 충돌되었다가 충돌에서 빠져나올 때 호출된다.
4. OnCollisionXXX
- 충돌 처리를 위해 호출되는 함수로 Collider의 IsTrigger가 체크되어 있지 않을 때 충돌이 발생하면 호출된다.
- OnCollisionEnter, OnCollisionStay, OnCollisionExit 등이있다.
- OnCollisionEnter는 충돌되었을 때 한번 호출한다.
- OnCollisionStay는 충돌되었을 때부터 충돌에서 빠져나오기 전까지 계속 호출된다.
- OnCollisionExit는 충돌되었다가 충돌에서 빠져나올 때 호출된다.
# Input events
1. OnMouseXXX
- 마우스의 입력으로 호출된다.
- OnMouseButtonDown, OnMouseButtonUp, OnMouseButton등이있다.
- OnMouseButtonDown는 마우스 버튼을 눌렀을 때 호출된다.
- OnMouseButtonUp는 마우스 버튼을 눌렀다가 뗏을 때 호출된다.
- OnMouseButton는 마우스 버튼을 누르면 호출된다. (누르고 있으면 지속 호출)
- 각각 int 값으로 파라미터를 넘길 수 있으며 0은 왼쪽, 1은 오른쪽, 2는 휠을 나타낸다.
# Game logic
1. Update
- 스크립트가 활성화 되어 있을 때 매 프레임마다 호출한다.
- 프레임은 기기의 성능에 따라 좌우되기 때문에 호출 물리계산을 할 때는 FixedUpdate를 사용하거나
코루틴을 이용하는것이 좋다.
2. Yield null
- Update 함수가 모두 호출된 후에 실행된다.
- 코루틴 함수에서 한 프레임 대기할 때 사용된다.
3. yield WaitForSeconds
- Update 함수가 모두 호출 된 후에 지정한 시간만큼 지연 후에 실행된다.
4. yield WWW
- WWW를 이용하여 다운로드 완료 후 실행된다.
5. yield StartCoroutine
- 코루틴을 연결하여 해당 코루틴이 완료될 때까지 대기한다.
6. LateUpdate
- Update 함수 후 프레임마다 한 번씩 호출된다.
# Scene rendering
1. OnWillRenderObject
- 카메라에 오브젝트가 표시되면 각 카메라에서 한 번 호출된다.
2. OnPreCull
- 카메라가 씬을 추려내기 전에 호출된다.
- 컬링하여 카메라가 어떤 오브젝트를 표시할 지가 결정되고 컬링이 발생하기 직전에 호출된다.
3. OnBecameInvisible / OnBecameVisible
- 오브젝트가 카메라에 표시되거나 표시되지 않게 되었을 때 호출된다.
4. OnPreRender
- 카메라가 씬의 렌더링을 시작하기 전에 호출된다.
5. OnRenderObject
- 모든 씬 렌더링이 종료된 후에 호출된다.
6. OnPostRender
- 카메라가 씬의 렌더링을 종료한 후에 호출 된다.
7. OnRenderImage
- 화면 렌더링이 완료되고, 화면 이미지 처리가 가능하게 된 후에 호출된다.
# Gizmo randering
1. OnDrawGizmos
- 시각화를 위한 씬 뷰에서 기즈모를 그리는 데 사용된다.
# GUI rendering
1. OnGUI
- GUI이벤트에 따라 매 프레임마다 여러 차례 호출된다.
- 흔히 우리가 치트키 화면을 그리거나할 때 많이 사용하고 있다.
# End of frame
1. yield WaitForEndOfFrame
- 하나의 프레임이 완전히 종료될 때 호출된다.
- 매 프레임마다 Update, 렌더링 등이 끝나게 되면 호출된다.
# Pausing
1. OnApplicationPause
- 예를들어 모바일 기기에서 홈버튼을 누르거나 홀드 버튼을 눌렀을 경우 호출된다.
(인자값으로 true, false를 받는다.)
2. OnApplicationFocus
- 예를들어 모바일 기기에서 홈버튼을 누르거나 홀드 버튼을 눌렀을 경우 호출된다.
(해당 앱에서 다른 앱으로 포커싱이 변경되었을 때 호출된다. 인자값으로 true, false를 받는다.)
# Disable/enable
1. OnDisable
- 스크립트가 켜져있을 때, 오브젝트가 비활성화 될 때마다 호출된다.
- 즉, 오브젝트가 켜져있다가 꺼버리면 호출된다.
# Decommissioning
1. OnApplicationQuit
- 응용 프로그램 종료 전에 모든 게임 오브젝트에서 호출된다.
- 에디터의 경우 '실행' 버튼을 꺼버리면 호출된다.
2. OnDisable
- 위 사이클에서 설명한것과 동일하다.
- 단지, 앱 종료시 호출되는 시점상 한번 더 표기한 것.
3. OnDestroy
- 오브젝트가 파괴(삭제,제거)될 때 호출된다.
- 정확히는 해당 오브젝트의 마지막 프레임의 업데이트 후에 호출된다.
'유니티 > 기본기' 카테고리의 다른 글
에셋번들 (Asset Bundle) (0) | 2021.02.25 |
---|---|
오일러각과 짐벌락 그리고 쿼터니언 (0) | 2021.02.09 |
Unity - RawImage (2) | 2020.10.30 |
Unity - Image (0) | 2020.10.29 |
Unity - Graphic RayCaster (1) | 2020.10.28 |