유니티 라이프 사이클

PTK·2025년 2월 19일
0

유니티 스크립트의 대두분은 Monobehaviour 클래스를 상속받아 만들어진다. 이 클래스를 상속받은 오브젝트는 Scene에 있는 동안 엔진에서 일정한 흐름에 따라 자동으로 함수를 호출하는데, 이 패턴의 흐름을 생명 주기(Life Cycle)라 부른다.

using UnityEngine;

public class LifeCycleExample : MonoBehaviour
{
    // 1️⃣ 오브젝트가 생성될 때 단 한 번 실행 (가장 먼저 실행됨)
    void Awake()
    {
        Debug.Log("1️⃣ Awake() - 오브젝트가 생성됨");
    }

    // 2️⃣ 오브젝트가 활성화될 때 실행됨
    void OnEnable()
    {
        Debug.Log("2️⃣ OnEnable() - 오브젝트가 활성화됨");
    }

    // 3️⃣ Start()는 게임이 시작될 때 단 한 번 실행됨 (Awake() 후 실행)
    void Start()
    {
        Debug.Log("3️⃣ Start() - 게임 시작");
    }

    // 4️⃣ 매 프레임마다 실행 (게임 로직 업데이트)
    void Update()
    {
        Debug.Log("4️⃣ Update() - 매 프레임 실행");
    }

    // 5️⃣ 모든 Update()가 끝난 후 실행 (오브젝트의 위치 조정 등에 활용)
    void LateUpdate()
    {
        Debug.Log("5️⃣ LateUpdate() - Update() 실행 후 실행");
    }

    // 6️⃣ 물리 연산에 최적화된 고정된 시간 간격으로 실행 (물리 관련 로직)
    void FixedUpdate()
    {
        Debug.Log("6️⃣ FixedUpdate() - 물리 연산 실행");
    }

    // 7️⃣ 오브젝트가 비활성화될 때 실행
    void OnDisable()
    {
        Debug.Log("7️⃣ OnDisable() - 오브젝트가 비활성화됨");
    }

    // 8️⃣ 오브젝트가 제거될 때 실행 (게임 종료 또는 Destroy() 호출 시)
    void OnDestroy()
    {
        Debug.Log("8️⃣ OnDestroy() - 오브젝트가 삭제됨");
    }
}

추가)

Update 와 FixedUpdate의 차이점

FixedUpdate()는 고정된 시간 간격(기본값 0.02초, 50FPS)으로 실행됩니다.

즉, 게임의 프레임 레이트가 높거나 낮아질 경우 Update()보다 FixedUpdate()가 더 자주 실행되거나 덜 실행될 수 있습니다.

Update() → 플레이어 입력, UI, 애니메이션 업데이트
FixedUpdate() → 물리 연산 (Rigidbody, Force, Collision 등)

Update()는 매 프레임 실행되고, FixedUpdate()는 일정한 물리 업데이트 간격으로 실행된다.

추가)

Awake 와 OnEnable의 차이점

Awake() → 객체가 생성되면 가장 먼저 호출됨
OnEnable() → Awake() 후 객체가 활성화되면 실행됨

SetActive(false) 했다가 다시 true로 만들면? Awake()는 다시 실행되지 않지만, OnEnable()은 다시 실행됨

Awake()를 사용할 때

객체의 기본 데이터를 초기화해야 할 때
다른 컴포넌트의 참조를 설정해야 할 때
게임이 시작되면 한 번만 설정해야 하는 작업 (예: 싱글톤 인스턴스 설정)

OnEnable()을 사용할 때

객체가 활성화될 때마다 실행해야 하는 코드 (예: UI 업데이트)
SetActive(true) 될 때마다 특정 동작을 수행해야 할 때
이벤트 리스너를 추가할 때 (ex: EventManager.OnEvent += SomeFunction;)

0개의 댓글