유니티 기본기 : 이벤트 함수 실행 순서

유니티의 이벤트 함수란 무엇인가?

--

유니티의 세계에서, 게임 오브젝트의 동작과 생명 주기는 이벤트 함수들에 의해 구동됩니다. 그렇다면, 이 이벤트 함수들은 무엇을 위해 존재하며, 어떤 순서와 목적으로 동작하는 것일까요?

유니티 문서에 따르면, 이벤트 함수는 게임 오브젝트의 특정 시점에서 자동으로 호출되는 함수들로 정의됩니다. 일반적인 메서드와는 달리, 이 함수들은 게임 오브젝트의 상태나 환경에 따라 자동으로 실행되는 특징이 있습니다.

그럼, 이벤트 함수의 종류에는 어떤 것이 있을까요? 유니티 메뉴얼에 따르면, 다양한 이벤트 함수들이 아래와 같이 소개되고 있습니다.

스크립트 라이프사이클 플로우차트

위 다이어그램을 살펴보면 각 파트에서 어떤 작업이 실행되는지 확인 할 수 있습니다. 이번 포스팅에서는 이 중에서도 가장 기초적인 이벤트만 설명 하도록 하겠습니다.

더욱 자세한 이벤트의 종류와 내용을 알고 싶다면 여기를 클릭해 주세요.

사용하기 전에

유니티의 모든 이벤트 함수는 MonoBehaviour를 상속받는 스크립트에서만 사용할 수 있습니다. 이는 유니티 엔진과 연동하기 위한 필수 조건입니다.

Q. Awake와 Start의 차의는 무엇인가?

Awake는 게임 오브젝트의 탄생을 알리는 첫번째 함수로 정의하고 있습니다.
대부분의 초기화 작업은 주로 Start나 다른 이벤트 함수에서 이루어지곤 합니다. 그러나 Awake는 다른 모든 스크립트의 초기화 작업보다 먼저 실행되므로, 상호 참조나 특정 컴포넌트의 준비 작업에 적합합니다. 쉽게 말하자면, Awake는 “게임 오브젝트의 생성과 동시에 실행되어야 하는 작업”을 처리하는 함수로 볼 수 있습니다.

하지만 Awake만으로 모든 초기화 작업을 처리하기에는 한계가 있습니다. 이런 경우에는 다른 초기화 함수인 Start를 함께 고려해야 합니다.

Start는 Awake 함수 이후, 첫 프레임 업데이트 전에 실행되는 초기화 함수 입니다. 주로 게임의 논리나 연산에 있어서 첫 스텝으로 필요한 설정이나 초기화를 담당합니다. 또한, Awake에서 준비된 변수나 컴포넌트를 활용하여 게임 로직을 위한 기본 셋팅을 구성합니다. 간단히 말해, “게임 시작 직후의 최초 환경 설정이나 조건을 준비하는 함수”라고 볼 수 있습니다. 예를 들어 플레이어의 시작 위치 설정, 게임 레벨의 초기 설정, 아이템의 초기 배치 등의 작업이 Start에서 이루어지곤 합니다.

Q. OnEnable와 OnDisable은 무엇인가?

OnEnable는 게임 오브젝트나 스크립트가 활성화될 때 호출되는 함수입니다. 반면, OnDisable는 게임 오브젝트나 스크립트가 비활성화될 때 마다 호출됩니다.

이 두 함수는 주로 게임 오브젝트의 생명 주기 중 활성화와 비활성화 상태의 전환 시점에 특정 로직을 실행하고자 할 때 사용됩니다. 간단히 말하면, “오브젝트의 활성/비활성 상태 변화에 따른 동작을 정의하는 함수”로 이해할 수 있습니다.

예컨대, 특정 아이템을 획득하면 해당 아이템의 표시를 활성화하고, 사용 후에는 비활성화하는 로직을 구현한다면, OnEnable과 OnDisable을 활용하여 이러한 동작을 쉽게 처리할 수 있습니다.

Q. FixedUpdate, Update 및 LateUpdate는 어떻게 다른가?

FixedUpdate는 주로 물리 연산과 관련된 작업에 사용됩니다. 일정한 시간 간격으로 호출되기 때문에 물리적인 연산의 일관성을 유지하는데 적합합니다.

Update는 매 프레임마다 호출되는 함수로, 게임 로직이나 입력 처리 등의 작업을 주로 담당합니다.

LateUpdate는 Update 이후에 호출되는 함수로, 주로 카메라 움직임이나 특정 오브젝트의 후속 처리를 담당하기에 적합합니다.

위의 세 함수를 간단히 정리하면, “게임의 논리, 물리, 후처리를 각각 담당하는 업데이트 함수”라고 설명할 수 있습니다. 예를 들어, 플레이어의 움직임을 처리하는 로직은 Update에서, 그 움직임에 따른 충돌 처리FixedUpdate에서, 마지막으로 플레이어의 움직임을 따라가는 카메라 움직임LateUpdate에서 처리하게 됩니다.

OnDestroy와 OnApplicationQuit의 차이점은?

OnDestroyOnApplicationQuit 함수는 어떻게 다른 것일까요? 이 두 함수는 유사한 목적을 가진 것처럼 보이지만, 실제로는 각기 다른 시점에서 호출되어 특정 작업을 처리합니다.

OnDestroy게임 오브젝트나 관련 컴포넌트가 파괴될 때 호출되는 함수입니다. 예를 들어, 오브젝트를 삭제하거나 씬을 변경할 때 해당 오브젝트와 연결된 스크립트에서 이 함수가 호출됩니다. 이 함수는 리소스 해제나 마무리 작업, 그 외에 오브젝트 삭제 전 필요한 작업들을 수행하기에 적합합니다.

OnApplicationQuit는 애플리케이션 자체, 즉 게임이 종료될 때 호출되는 함수입니다. 사용자가 게임을 종료하거나 에디터를 닫을 때 이 함수가 호출되어 마지막으로 실행할 작업들을 정의합니다. 이는 게임 전체의 종료를 알리는 함수로, 저장 작업이나 게임 세션의 로그를 기록하는 등의 마무리 작업에 사용됩니다.

간단히 말하면, “OnDestroy는 오브젝트의 생명 주기의 끝을, OnApplicationQuit는 게임 전체의 생명 주기의 끝을 각각 처리하는 함수”라고 볼 수 있습니다.

예를 들어, 특정 아이템 오브젝트를 파괴할 때 그 아이템과 관련된 효과나 애니메이션을 마무리하는 로직이 OnDestroy에서 실행될 수 있고, 게임 전체를 종료하기 전에 플레이어의 진행 상태나 점수를 저장하는 작업이 OnApplicationQuit에서 처리될 수 있습니다.

끝맺음

오늘은 유니티의 이벤트 함수 실행 순서와 그 목적을 간단하게 알아보았습니다. 유니티의 동작 원리를 이해하는데 조그만 도움이 되었길 바랍니다.

더 많은 하이퍼 캐주얼 게임 개발 팁을 알고 싶으신가요?
지금 바로
여기를 클릭해서, 슈퍼센트의 파트너가 되어 보세요!

[Contact]
- E-mail: help@supercent.io
- Website:
supercent.io

--

--

Supercent.official
Supercent Blog 슈퍼센트 블로그

Insights and tips to take your hyper-casual game to the top of the charts