말감로그

24.08.19 Unity_C# - 생명주기(Awake vs Start, Update 등 ) 본문

TIL

24.08.19 Unity_C# - 생명주기(Awake vs Start, Update 등 )

habbn 2024. 8. 19. 22:10
728x90

유니티 생명 주기

Unity의 생명주기는 유니티 엔진의 게임 개발 과정에서 매우 중요한 개념입니다.

게임 오브젝트가 생성되어 화면에 나타나고, 게임이 진행되어 오브젝트가 사라지기까지의 일련의 과정을 의미합니다. 

 

* MonoBehaviour 클래스는 게임 오브젝트의 동작을 정의하는 기본 클래스입니다. 이 클래스의 여러 메서드들은 Unity의 생명 주기를 통해 자동으로 호출됩니다.

 

Awake vs Start

둘 다 클래스의 초기화에 사용되는 이벤트 함수로 호출 시기에 따른 차이가 있습니다.

 

Awake

- 스크립트와 연결된 GameObject가 인스턴스화되거나, 스크립트가 처음 로드 될 때 호출된다.

- 해당 오브젝트가 Enable 상태가 아니라고 해도 위 조건에 따라 로드되면 호출된다.

- 다른 오브젝트에 대한 참조를 생성할 때 주로 생성하게 된다. (GameObject.Find, GetComponent, FindObjectOfType 등)

-- 단 Awake 호출은 무작위. (여러 개의 스크립트가 있는 경우 각 스크립트에서 'Awake' 메서드가 실행되는 순서 보장 x)

-- 무작위성으로 인해 다른 스크립트의 참조를 통해 접근을 하면 NullReferenceException이 발생하게 된다.

Start

- 해당 스크립트 컴포넌트가 활성화되는 순간 호출된다.

- 호출 시기는 Awake보단 느리게 첫 Update 보단 빠르게 호출된다.

- Start에서는 참조를 통해 접근하는 작업이 가능하다.

 

OnEnable vs Start

둘 다 '컴포넌트가 활성화 될 때' 불린다는 공통점이 있어 묶이게 되지만 Start는 한 번, OnEnable은 활성화 될 때 마다 불리게 된다는 차이점이 있습니다. 때문에 초기화 작업에 OnEnable을 활용하면 안됩니다. OnEnable은 주로 오브젝트 풀링에 사용하게 되는 함수라고 볼 수 있습니다.

 

Update vs FixedUpdate vs LateUpdate

- Update : 프레임 단위로 호출된다.

- FixedUpdate : 고정 단위로 불리게 되는 함수

- LateUpdate :  Update 호출 뒤 불리게 된다.

 

FixedUpdate는 매 함수 호출 간격이 다른 Update와는 달리 호출 간격이 일정합니다. 따라서 매번 일정한 주기로 똑같은 연산을 처리해야하는 물리 계산인 Rigidbody에 주로 사용됩니다. 

LateUpdate는 Update 함수 호출 뒤 불리기 때문에 주로 카메라의 움직임에 사용됩니다. 

728x90