[Unity] 이벤트 함수와 생명주기

Jongmin Kim·2025년 5월 22일

Unity

목록 보기
1/19
post-thumbnail

생명주기

Unity 스크립트가 실행되면 순차적으로 이벤트 함수들이 호출된다.
객체가 생성되어 활성화, 업데이트, 파괴되는 과정을 생명주기라고 한다.


이벤트 함수의 실행 순서



First Scene Load

Awake

Awake()데이터를 초기화하는 목적으로 만들어진 이벤트 함수다. 씬이 실행된 직후에 1회 호출된다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화O
비활성화활성화X
비활성화비활성화X

OnEnable

OnEnable()MonoBehaviour 객체가 생성되어 활성화될 때 발생한다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X

OnEnable()각 컴포넌트의 Awake()가 호출된 직후에 실행된다.



Editor

Reset

게임 오브젝트에 컴포넌트를 처음 연결하거나 에디터에서 Reset을 클릭할 때 호출된다.
컴포넌트의 프로퍼티를 초기화하기 위해서 사용한다.



Before the first frame update

Start

게임 오브젝트의 컴포넌트가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출된다.

런타임 전에 씬에 배치된 게임 오브젝트의 경우 모든 스크립트에 대해 Update() 이전에 Start()가 호출됨이 보장된다. 그러나 런타임에 게임 오브젝트를 인스턴스화 하는 경우에는 다르다.

런타임에 게임 오브젝트를 인스턴스화 하는 경우, Start()인스턴스화 된 프레임의 다음 프레임에 호출된다.

private void Start()
{
    Debug.Log("Start() 호출");
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Debug.Log("인스턴스화");
        Instantiate(this);
        Debug.Log("인스턴화 완료");
    }
}

결과적으로 초기화 함수의 호출 순서는 Awake()OnEnable()Start()이지만, 이 순서대로가 아닌 Update() 호출 직전에 Start()가 호출된다고 생각해야 맞다.

또한, 씬에 게임 오브젝트나 컴포넌트가 둘 중 하나라도 비활성화된 경우, 처음 활성화가 될 때 1회 호출된다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X



In between frames

OnApplicationPause

OnApplicationPause()일시 정지가 감지된 프레임과 그 다음 프레임 사이에 호출된다.

프레임과 프레임 사이에서 일시 정지가 되고 끝나는 것이 아니라 일시 정지를 시각화하기 위한 작업을 위해 한 프레임을 더 소모하여 일시 정지임을 나타낸다.



Update Order

FixedUpdate

FixedUpdate()프레임에 영향을 받지 않고 정해진 횟수만큼 호출된다.
기본 값은 0.02로 1초에 50회 호출된다.

Edit - Project Setting - Time의 "Fixed Timestep"에서 호출 주기를 설정할 수 있다.

정해진 횟수만큼 호출됨을 보장하기 때문에 FixedUpdate()에서 물리 연산을 진행할 때 Time.deltaTime을 곱할 필요가 없다.

FixedUpdate()가 호출된 직후 물리 계산 및 업데이트가 발생한다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X

Update

Update()프레임 당 한 번 호출된다. 하지만 프레임이 업데이트되는 시간은 일정하지 않기 때문에, Time.deltaTime은 항상 달라진다.

코루틴은 Update()가 반환된 직후에 업데이트된다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X

LateUpdate

LateUpdate()각 컴포넌트의 Update()가 실행된 이후에 호출된다.

LateUpdate()Update()의 계산이 끝났다는 것을 보장하므로, Update() 계산 이후에 호출할 필요가 있는 행동들에 주로 사용된다.

  • Player와 Camera의 경우, Player가 이동한 후 Player의 위치로 Camera가 이동해야 한다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X



When the Object is destroyed

OnApplicationQuit

OnApplicationQuit()애플리케이션이 종료되기 전, 모든 게임 오브젝트에서 1회 호출된다.
에디터에서는 Play Mode가 종료될 때 호출된다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화O
비활성화활성화X
비활성화비활성화X

OnDisable

OnDisable()게임 오브젝트나 컴포넌트가 비활성화 될 때 호출되며, OnEnable()의 역기능을 한다.

게임 오브젝트컴포넌트실행
활성화활성화X
활성화비활성화O
비활성화활성화O
비활성화비활성화O

OnDestroy

OnDestroy()게임 오브젝트가 파괴될 때 호출되며, 씬의 모든 업데이트 이후 호출된다.
씬 전환 및 종료 시, 그리고 게임 종료 시에도 게임 오브젝트가 파괴되므로 호출된다.

게임 오브젝트컴포넌트실행
활성화활성화O
활성화비활성화X
비활성화활성화X
비활성화비활성화X



마무리

애니메이션 업데이트, 렌더링, 코루틴은 생명 주기 설명에서 제외했으므로 더 자세한 내용은 공식 문서를 참고하면 될 것 같다.

profile
Game Client Programmer

0개의 댓글