Unity 개발 일지/Unity 공부

유니티 생명주기(Unity Lifecycle)

ohty20012 2025. 5. 14. 22:30

GameObject는 유니티에서 매우 중요하고 핵심적인 개념 중 하나이다. GameObject가 생성되고, 실행되고, 파괴되기 까지 일련의 과정을 생명주기(LifeCycle)라고 한다.

GameObject의 생명주기를 정확히 이해하는 것은, 내부 스크립트의 흐름을 명확히 파악하고, 제어할 수 있다는 것이다.

또한 GameObject 뿐만이 아닌, 전반적인 게임의 초기화, 업데이트, 종료 과정을 효율적으로 관리할 수 있다.

 

각 메서드의 특징은 최대한 간단하게 하고, 사용하기 좋은 상황 위주로 정리하였다.

 

 

1. 초기화 단계

(1) Awake() : 스크립트 인스턴스가 로드될 때 가장 먼저 호출

  • 싱글톤 초기화
  • 객체 간 참조 설정
  • 데이터 로드

(2) OnEnable() : 오브젝트가 활성화 될 때마다 호출

  • UI활성화 시 초기화 ( ex: 이벤트 리스너 등록)
  • 오브젝트 활성화 시 준비작업
  • Coroutine 호출

(3) Start() : Awake() 이후 첫 프레임 전에 한 번 호출

  • 외부 의존성 초기화

 

2. 물리 단계

(1)FixedUpdate() : 일정 시간 간격으로 호출(물리 엔진과 동기화)

  • 물리 연산
    • Rigidbody를 이용한 이동
    • 힘을 가하는 계산
    • 물리적 움직임 처리
    • 등등

 

3. 게임 로직 단계

(1) Update() : 매 프레임마다 호출(프레임 속도에 따라 다름 == 컴퓨터에 따라 다름)

  • 사용자 입력 처리
  • 애니메이션 관리
  • 오브젝트 상태 변경

(2) LateUpdate() : Update 이후 호출. 후처리에 적합

  • 카메라 위치 조정
  • 부모 - 자식 간 위치 동기화

(3)OnGUI() : GUI 이벤트 처리

  • GUI 이벤트 처리
  • 디버그 정보 출력

 

4. 비동기 및 코루틴

(1) Coroutine (IEnumerator) : 비동기 작업 처리. yield return을 통해 대기 및 재개.

  • 시간 대기
  • 조건 대기
  • 비동기 다운로드

 

5. 해체 단계

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

  • 이벤트 리스너 해체
  • 상태 저장
  • UI 비활성 처리

(2) OnDestroy() : 오브젝트 파괴 시 호출

  • 씬 전환
  • 메모리 정리
  • 데이터 정리
  • 파일 저장

 

< 싱글톤을 사용할 때 Awake에서 초기화 하는 이유는 뭘까? >

싱글톤 초기화를 Start()에 두면, 다른 스크립트의 Awake() 또는 Start()에서 싱글톤 인스턴스를 참조할 때 null이 될 수 있기 때문이다.

 

 

참고 자료

유니티 공식 문서

https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com