CS 공부

[Unity] 생명주기(Life Cycle)

때류기 2024. 9. 4. 23:05

Unity에서 MonoBehaviour는 모든 스크립트가 상속받는 기본 클래스입니다. 게임 오브젝트의 동작을 정의하고 제어할 때 사용되며, 이 클래스의 메서드들은 특정한 순서에 따라 생명주기(lifecycle)동안 자동으로 호출됩니다. 이 생명주기를 이해하면, 게임 오브젝트가 언제 어떻게 동작하는지를 제어할 수 있고, 효율적인 로직을 작성할 수 있습니다.

 

MonoBehaviour에 대해서는 다음에 알아보도록 하고, 이번 글에서는 생명주기에 대해서 알아보겠습니다.

 

 

 


1. 생명주기란?

Unity의 생명주기는 게임 오브젝트의 상태에 따라 특정 시점에 호출되는 일련의 메서드들로 이루어져 있습니다. 이러한 메서드들은 게임 오브젝트가 생성, 활성화, 업데이트, 비활성화, 삭제되는 과정에서 순차적으로 호출됩니다.

이 생명주기는 게임 오브젝트의 동작을 제어하는 중요한 요소이며, 적잘한 시점에 필요한 작업을 처리하도록 도와ㅏ줍니다. 예를 들어, 게임이 시작되기 전 초기화 작업을 하거나, 게임이 실행되는 동안 지속적으로 업데이트해야 할 로직을 처리하는데 유용합니다.

 

 

 


2. 생명주기 메서드 및 호출 순서

생명주기는 위의 이미지 처럼 구성되어있습니다. 하지만 전부 다 알기는 내용이 많고 복잡하기에 중요하다고 생각되거나 자주 사용되는 생명주기들 위주로 설명을 드리겠습니다.

 

 

1)Awake(): 게임 오브젝트가 활성화되기 전 가장 먼저 호출되며 비활성화 상태 일때도 호출

 

2) OnEnable(): 게임 오브젝트나 스크립트가 활성화 될때 호출, 비활성화 상태에서 다시 활성화될 때에도 호출

 

3) Reset(): 컴포넌트가 처음 추가될 때 또는 Unity 에디터의 Reset 버튼을 눌렀을 때 호출

 

4) Start(): 오브젝트가 활성화 된 후, 첫 프레임이 시작되기 전에 한 번만 호출

 

5) FixedUpdate(): 고정된 시간 간격마다 호출, 주로 물리 연산을 처리할 때 사용

 

6) OnTriggerXXX(): 오브젝트가 Trigger 콜라이더와 충돌할 때 호출

 

7) OnCollisionXXX(): 오브젝트가 물리적 충돌을 할때 호출

 

8) Update(): 매 프레임마다 호출

 

9) LateUpdate(): 모든 Update() 메서드가 완료된 후에 호출

 

10) OnApplicationQuit(): 애플리케이션이 종료되기 직전에 호출. Unity에디터에서 Play 모드를 중지할 때도 호출

 

11) OnDisable(): 게임 오브젝트가 비활성화될 때 호출

 

12) OnDestroy(): 게임 오브젝트가 제거되기 직전에 호출

 

 

 


3. 생명주기의 중요성

Unity의 생명주기를 이해하는 것은 게임 오브젝트의 상태 변화를 적절히 처리하는데 있어 매우 중요합니다! 

각 메서드는 특정 시점에 호출되므로, 이를 적절히 사용하여 초기화, 업데이트, 정리 작업을 효율적으로 수행할 수 있습니다. 특히 게임의 성능과 유연성을 높이기 위해 각 메서드의 적절한 사용이 필요합니다.

  • Awake()와 Start()의 차이: Awake()는 오브젝트가 활성화되기 전 호출되며, Start()는 첫 프레임 전에 호출됩니다. 상호작용이 필요한 초기화 작업은 Start()에서 처리하는 것이 좋습니다.
  • FixedUpdate()와 Update()의 차이: FixedUpdate()는 물리 엔진과 관련된 연산을 처리하는데 사용하는 것이 좋으며, Update()는 프레임 기반으로 게임 로직을 처리하는 데 적합합니다. (물리 관련 연산을 Update에서 진행할 경우 실행중인 하드웨어 성능에 따라 다른 결과를 얻을 수 있습니다.)
  • LateUpdate()의 사용: LateUpdate()는 주로 카메라 이동이나 다른 오브젝트의 업데이트 후에 동작해야 할 로직을 처리할 때 사용합니다.

 

 


지금까지 Unity 생명주기에 대해 알아보았습니다.

현재 글의 내용 중 틀린 부분이나, 지적하실 내용이 있으시다면 언제든지 알려주세요! 읽어주셔서 감사합니다.