관리 메뉴

개발블로그

[유니티] 유니티 생명주기 (Unity Life Cycle) 본문

Unity

[유니티] 유니티 생명주기 (Unity Life Cycle)

dvmoo 2021. 7. 26. 20:27

유니티는 사용자가 따로 호출하지 않아도 실행되는 함수들이 있는데, 그 함수들의 호출 주기를 유니티 생명주기라고 한다.

이 함수들의 호출 주기는 사용자가 수정할 수 없기 때문에 함수의 흐름을 잘 이해하고 있는게 중요하다.

 


 

✔ 대표적으로 많이 사용하는 이벤트 함수의 순서도

그림 1 유니티 생명주기 (Life Cycle)

 

Awake 

Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출된다.

게임 오브젝트가 시작하는 동안 비활성 상태인 경우엔 Awake 함수는 활성화 될 때까지 호출되지 않는다.

 

 

OnEnable

(오브젝트가 활성화 된 경우에만) 오브젝트 활성화 직후 이 함수를 호출한다. 활성화 할 때마다 호출된다.

 

 

Start

스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출된다.

 

 

FixedUpdate

물리 엔진을 사용하는 경우에 일정 시간 간격으로 힘을 가할 때 사용하는 함수.

프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있다.

 

 

Update 

프레임 당 한번 호출된다. 프레임 업데이트를 위한 주요 작업 함수이다.

일정한 간격으로 호출되는 FixedUpdate에 비해 Update는 주기가 일정하지 않다.

 

 

LateUpdate

Update가 끝난 후 프레임 당 한번 호출 된다.

Update에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료 된다.

 

 

OnDestroy

오브젝트가 살아있는 기간의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 이 함수가 호출 된다.

 

 

OnApplicationQuit 

애플리케이션 종료 전 모든 게임 오브젝트에서 호출된다.

에디터에서 사용자가 플레이 모드를 중지할 때 호출 된다.

 

 

OnDisable

동작이 비활성화되거나 비활성 상태일 때 이 함수가 호출 된다.

 


✔ Awake, OnEnable, Start, OnDisable

using UnityEngine;

public class LifeCycle : MonoBehaviour
{
    void Awake()
    {
        Debug.Log("Awake");
    }

    void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    void Start()
    {
        Debug.Log("Start");
    }

    void OnDisable()
    {
        Debug.Log("OnDisable");
    }

}

 

그림 2

 

LifeCycle 스크립트를 작성해서 MainCamera에 넣어주었다. 그림 2

그리고 LifeCycle 컴포넌트를 체크 해제해서 비활성화 후 실행했다.

 

 

GIF 1 잘 안보일 때는 클릭해서 보면 잘 보입니다.😊

(1) 비활성화 된 상태에서는 실행했을 때 가장 먼저 Awake가 실행된다.

(2) 비활성화 된 스크립트 컴포넌트를 다시 활성화하면 OnEnable이 먼저 실행되고, Start가 실행된다.

(3) 다시 스크립트를 비활성화 하면 OnDisable이 실행된다.

(4) 스크립트를 활성화하면 OnEnable이 실행된다.

 

Awake와 Start는 스크립트가 실행됐을 때 딱 한번만 호출하므로 컴포넌트를 껐다, 켰다 해도 다시 호출되지 않는다.

OnEnable과 OnDisable은 컴포넌트가 껐다 켜질 때 마다 호출되는 것을 확인할 수 있다.

 

 


유니티 도큐먼트 :

https://docs.unity3d.com/kr/2020.3/Manual/ExecutionOrder.html#WhenQuitting

 

 

 

 

 

 

* 공부하는 단계입니다. 잘못된 내용이 있다면 피드백 부탁드립니다😊

* e-mail : heehee970@naver.com