Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 추천
- 홍대 방탈출 추천
- 넥스트에디션 2호점
- 넥스트에디션
- 꽃길
- 방탈출
- 공포 방탈출
- Android
- PC VR
- 2021 방탈출 추천
- 후기
- 이스케이퍼스
- 방탈출 리뷰
- C 자료구조
- 홍대
- 개발
- 홍대 덤앤더머
- C#
- 방탈출 추천
- Unity
- C++ 자료구조
- 윈도우 프로그래밍
- 이스케이퍼스 2호점
- 유니티
- 시스템 프로그래밍
- 방탈출 후기
- 강남 방탈출
- 홍대 방탈출
- 정렬 알고리즘
- 필활
Archives
- Today
- Total
행복한 연어의 이야기
(Unity) 유니티 이벤트 함수 실행순서 본문
아래 사진은 유니티 스크립트 라이프사이클 플로우 차트입니다.
자주 사용하는 이벤트 함수만 서술하도록 하겠습니다.
기본적인 호출 순서대로 적혀있습니다.
Awake
- 프리팹이 인스턴스화 된 직후에 호출됩니다. 오브젝트가 비활성화되어 있다면 awake 함수는 호출되지 않다가 오브젝트가 활성되는 순간 호출됩니다. 그 후 오브젝트를 비활성화(Deactive) -> 활성화(Active) 해도 다시 호출되지 않습니다. 최초 1회만 호출됩니다.
- Awake 만 있는 스크립트에 경우 스크립트 활성화(Enable) 버튼이 뜨지 않습니다. OnEnable, Start 같은 함수가 있어 스크립트가 비활성화(Disable) 해 놓았더라도 Awake 함수는 호출됩니다.
OnEnable
- 오브젝트 활성화(Active)(스크립트 활성화(Enable) 포함) 직후 이 함수를 호출합니다. 게임 오브젝트 + 스크립트 모두 활성화되어있어야 합니다.
- Awake 와는 다르게 비활성화(Deactive) -> 활성화(Active) 할 때마다 호출됩니다. 오브젝트 비활성화(Deactive) -> 오브젝트 활성화(Active) or 스크립트 비활성화(disable) -> 스크립트 활성화(enable) 두 가지 경우 모두 호출됩니다.
Start
- 스크립트 인스턴스가 활성화된 경우에 호출합니다. 즉 게임 오브젝트 + 스크립트 모두 활성화되어있을 때 최초 1회의 한정하여 호출합니다. 호출 시기는 첫 번째 프레임 업데이트 전입니다..
Awake, Start 차이
Awake 가 Start 보다 빠르다. (Awake는 프리팹 인스턴스화 된 직후, Start는 첫 프레임 전)
모든 오브젝트의 Awake를 실행하고 Start가 실행된다는 뜻이므로 순서를 잘 생각해야 한다.
만약 Object1 에서 Script1 의 Start 함수를 호출하고 Object2 에서도 Sctript2의 Start 함수를 호출한다면
두 스크립트의 Start 함수의 순서는 유니티가 내부적으로 결정하므로 랜덤이라고 생각하면 된다. (기본적으로 제어되지 않는다.)Awake는 스크립트가 비활성 되어있더라도 호출된다.
보통 Awake는 자신이 초기화할 수 있는 작업을 수행하고 Start는 다른 Class 를 참조하는 경우 사용한다.
FixedUpdate
- 기본적으로 매 프레임마다 호출되는 Update 함수보다 덜 호출되지만 종종 더 많이 호출될 수도 있습니다. FPS가 낮은 경우 한 프레임당 여러 번 호출될 수 있고 FPS가 높은 경우 프레임 사이에 호출되지 않을 수 도 있습니다.
- 모든 물리 계산은 FixedUpdate 함수 뒤 즉시 실행합니다. 그리고 FPS가 독립적으로 호출되기 때문에 이동 관련 코딩을 FixedUpdate 함수에서 호출한다면 Time.deltaTime 은 곱해줄 필요가 없습니다.
OnTriggerXXX
- OnTriggerEnter, OnTriggerStay, OnTriggerExit 함수가 여기서(Fixed Update 이후에) 실행됩니다.
OnCollisionXXX
- OnCollisionEnter, OnCollisionStay, OnCollisionExit 함수가 여기서(Fixed Update 이후에) 실행됩니다.
yield WaitForFixedUpdate
- 호출되는 순서를 잘 기억하는 게 좋습니다. 일반적으로 코루틴은 Update 함수 반환 후에 실행되지만 yield WaitForFixedUpdate 함수는 FiexdUpdate 이후 Update 호출 전에 호출됩니다.
Update
- 프레임 당 한번 호출됩니다. 프레임 업데이트를 위한 주요 작업 함수입니다.
나머지 yield 함수들
- yield null = 다음 Update 함수 후에 호출됩니다.
- yield WaitForSecond = 지정한 시간이 지난 후 호출됩니다.
- yield WWW = 웹 통신 작업이 완료된 후에 호출됩니다.
- yield StartCoroutine = 지정한 코루틴 함수가 끝난 뒤 호출합니다.
LateUpdate
- Update 가 끝난 후 프레임당 한번 호출합니다. Update 에서 수행된 계산은 LateUpate 가 시작할 때 완료됩니다. 기본적으로 3인칭 카메라에 사용합니다. 플레이어를 움직이고 LateUpdate 에서 카메라 움직임을 계산할 때 주로 사용됩니다.
랜더링 관련 함수
- 기본적으로 크게 신경 안 쓰셔도 됩니다. LateUpdate 후에 랜더링을 하는구나 정도로 알고 계시면 될 거 같습니다.
yield WaitForEndOfFrame
- 이것도 호출되는 순서를 기억하는 게 좋습니다. 모든 업데이트 관련 함수들 (FixedUpdate, Update, LateUpdate)이 끝난 뒤 호출됩니다.
OnApllicationPause
- 모든 프레임 계산이 끝난 뒤에 프로그램이 일시정지됩니다. 재 실행하면 FixedUpdate 부터 실행됩니다.
OnApllicationQuit
- 프로그램이 종료될 때 실행합니다.
OnDisable
- 오브젝트가 비활성화될 때 실행합니다. OnEnable 과 마찬가지로 오브젝트 Deactive, 스크립트 Disable 모두 호출됩니다.
OnDestroy
- 오브젝트가 파괴될 때 실행합니다. Awake 와 마찬가지로 스크립트가 비활성화(Disable) 되어있어도 호출됩니다.
기본적으로 제가 이해하고 조사한 내용을 적었습니다.
혹시라도 잘못되어 있으면 댓글로 알려주시면 감사하겠습니다!
'IT > Unity' 카테고리의 다른 글
(Unity) 안드로이드 프로파일러 (2) | 2020.01.24 |
---|---|
(Unity) 카드보드 & 데이드림 개발 환경 구축 (1) | 2020.01.23 |
(Unity) 유니티 기어 VR 개발 환경 구축 (2) | 2020.01.16 |
(Unity) 유니티 모바일 빌드 방법 (IL2CPP, MONO) (0) | 2020.01.15 |
(Unity) 코루틴(Coroutine) (0) | 2020.01.14 |
Comments