MonoBehaviour 란?
모든 Unity 스크립트가 상속받는 기본 클래스입니다.
MonoBehaviour는 Unity에서 C # 스크립트를 만들 때 프로젝트 창, MonoBehaviour에서 자동으로 상속되며 템플릿 스크립트를 제공합니다.
유니티 생명주기(Life Cycle) 란?
이 'Monobehaviour'가 Scene에서 살아가는 동안 일정한 흐름이 생기고, 엔진에서 자동으로 호출해주는 함수들이 생기는데 이 패턴의 흐름을 '생명 주기(Life cycle)'라고 합니다.
Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다.
공식 홈페이지에 있는 유니티의 생명주기 구성도입니다.
딱 봤을 때 복잡해 보여서 주춤하게 될 거 같다고 느껴져서, 주로 사용할 거 같은 생명주기들만 뽑아서 정리해봤습니다.
시작 부분에 사용되는 생명주기
Awake
- 프리 팹이 인스턴스화 된 직후에 호출됩니다.
- 게임 오브젝트가 시작하는 동안 비활성 상태인 경우 Awake 함수는 활성화될 때까지 호출되지 않습니다.
OnEnable
- 게임 오브젝트 활성화 직후 함수가 호출됩니다.
Reset
- 게임 오브젝트에 처음 연결하거나 Reset 커맨드를 사용할 때 스크립트의 프로퍼티를 초기화하기 위해 호출합니다.
Start
- 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 Update 전에 호출됩니다.
- 다른 모든 스크립트의 Awake가 모두 실행된 이후에 실행됩니다
게임 로직 실행에 사용되는 생명주기
FixedUpdate:
- 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있습니다.
- 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생합니다.
- FixedUpdate의 움직임 계산을 적용할 때 Time.deltaTime 만큼 값을 곱할 필요가 없습니다.
- FixedUpdate 가 프레임 속도와 관계없이 신뢰할 수 있는 타이머에서 호출되기 때문입니다.
Update:
- Update는 프레임당 한 번 호출됩니다.
- 호출 시기가 프레임이 영향을 받기 때문에 컴퓨터 성능에 의해 결과가 바뀔 수 있습니다
LateUpdate:
- LateUpdate는 Update 가 끝난 후 프레임당 한 번 호출됩니다.
- Update에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료됩니다.
- 일반적으로 다음의 3인칭 카메라에 사용합니다.
게임 종료에 사용되는 생명주기
OnApplicationQuit:
- 에디터에서 사용자가 플레이 모드를 중지할 때 or 애플리케이션 종료 전 모든 게임 오브젝트에서 호출됩니다.
OnDisable
- 게임 오브젝트 또는 스크립트가 비활성화될 때 호출됩니다. (Coroutine은 사용 불가)
OnDestroy
- 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 이 함수가 호출됩니다.
- 오브젝트는 Destroy 또는 씬 종료에 대한 응답으로 파괴될 수 있습니다.
마무리
어떤 언어든 잘하기 위해선 구조를 알아야 하기 때문에 생명주기를 정리해서 작성해 봤습니다.
틀린 부분이나 이상한 부분이 있을 수도 있으니 주의하면서 참고하시면 좋을 거 같습니다.
이상으로 포스팅을 마치도록 하겠습니다.
참고)
https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.html
https://docs.unity3d.com/2019.3/Documentation/ScriptReference/MonoBehaviour.html
https://docs.unity3d.com/Manual/class-MonoBehaviour.html
https://docs.unity3d.com/kr/2020.3/Manual/ExecutionOrder.html
https://hangjastar.tistory.com/77
https://skuld2000.tistory.com/25
https://uyism28.tistory.com/13
https://tenlie10.tistory.com/171
'기타 분야 > Unity' 카테고리의 다른 글
[Unity] GameObject 정리 (0) | 2021.05.30 |
---|---|
[Unity] 유니티 UI 시스템 - UGUI (0) | 2021.05.27 |
[Unity] 유니티 UI 시스템 (0) | 2021.05.25 |
[Unity] Rider를 사용해서 유니티 개발하기 (환경 세팅) (0) | 2021.05.23 |