라이프사이클

유니티

유니티의 각 객체에도 LifeCycle이 존재한다

using UnityEngine;
 
public class LifeCycle : MonoBehaviour
{
  // 최초 1회
  void Awake()
  {
    Debug.Log("플레이어 데이터가 준비되었습니다.");
  }
  // 활성화 함수 (키고 낄때 실행되는 함수)
  void OnEnable()
  {
    Debug.Log("사용자가 로그인 하였습니다.");
  }
 
  void Start()
  {
    Debug.Log("사냥 장비를 챙겼습니다.");
  }
  // 물리 연산 (대략 1초에 50회, 고정된 시간)
  void FixedUpdate()
  {
    Debug.Log("이동~");
  }
  // 사용자 프레임당 물리 연산 (사용자 마다 다름)
  void Update()
  {
    Debug.Log("몬스터 사냥!!");
  }
  // 업데이트가 마칠때 실행
  void LateUpdate()
  {
    Debug.Log("경험치 획득.");
  }
 
  // 비활성화 함수 (종료시 실행)
  void OnDisable()
  {
    Debug.Log("사용자가 로그아웃 하였습니다.");
  }
  void OnDestroy()
  {
    Debug.Log("플레이어 데이터를 해제 하였습니다.");
  }
}

LifeCycle

초기화 단계

Awake: 최초 1회, Start 전에 실행됨

  • 씬이 로드될 때 가장 먼저 실행됨
  • 객체가 활성화되지 않아도 실행됨 (컴포넌트가 존재하면 실행)
  • 싱글톤, 데이터 로드, 초기 설정에 적합

Start: 시작단계

  • 오브젝트가 활성화된 후, 첫 프레임 전에 단 한 번 실행됨
  • 초기화가 필요하지만 Awake()보다는 늦게 실행해야 할 때 사용

활성화 단계: OnEnable: 오브젝트가 활성화 될때마다 실행됨

  • 오브젝트가 활성화될 때마다 실행됨
  • 비활성화(SetActive(false)) 후 다시 활성화되면 반복 실행됨

물리 연산 단계

FixedUpdate: 고정된 시간마다 함수실행 (기본값 0.02초마다 실행, Time.fixedDeltaTime 설정가능)

  • Time.fixedDeltaTime 간격마다 실행됨 (기본 0.02초)
  • 물리(Rigidbody) 관련 연산은 여기서 처리해야 함

Update: 사용자의 프레임수에 맞추어 함수 실행 (사용자 마다 연산횟수 다름)

  • 매 프레임 실행됨
  • 프레임 속도(FPS)에 따라 실행 횟수가 다름
  • Time.deltaTime을 사용해 프레임 속도를 보정해야 함 LateUpdate: Update()를 마칠때 실행
  • 모든 Update() 실행 후 마지막에 실행됨
  • 카메라 이동, 후처리 로직에 사용됨

게임 로직 단계

사용자가 정의한 함수 및 로직 실행

  • AI 처리, 이벤트 실행, UI 업데이트 등

비활성화 단계: OnDisable: 해제 전 실행되는 함수

  • 오브젝트 또는 컴포넌트가 비활성화될 때 실행됨
  • 다시 활성화되면 OnEnable()이 실행됨

해제 단계

OnDestroy: 해제 시 실행되는 함수

  • 게임 오브젝트가 완전히 삭제될 때 실행됨
  • 오브젝트를 다시 생성하지 않는다면 메모리에서 사라짐