본문 바로가기
기타 분야/Unity

[Unity] MonoBehaviour의 생명주기(Life Cycle)

by 검은도자기 2021. 6. 1.

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