TIL - Unity 생명주기 테스트 해보기

김보근·2025년 1월 9일

Unity

목록 보기
97/113

TIL: Unity 생명주기 (Unity Lifecycle)

오늘은 유니티의 생명주기에 대해 정리해봤다. 생명주기를 제대로 이해하면 코드 실행 순서를 예측하고 최적화하는 데 큰 도움이 된다.

Unity 생명주기의 주요 메서드

Awake()

오브젝트가 생성될 때 가장 먼저 호출된다.
주로 초기화 작업이나 싱글톤 패턴 구현 시 사용된다.
DontDestroyOnLoad 설정도 여기에서 주로 수행.

OnEnable()

오브젝트가 활성화될 때 호출된다.
이벤트 등록이나 UI 갱신 등 활성화될 때 필요한 작업을 처리.

Start()

첫 프레임이 실행되기 직전에 호출된다.
Awake와 달리 다른 오브젝트와의 상호작용이 가능하다.

Update()

매 프레임마다 호출된다.
이동, 애니메이션, 입력 처리 등 매 프레임 실행이 필요한 작업을 처리.

FixedUpdate()

물리 연산을 처리할 때 사용된다.
Update보다 일정한 간격으로 호출되므로 물리 연산의 정확도가 보장된다.

LateUpdate()

Update가 모두 실행된 후에 호출된다.
카메라 이동이나 UI 갱신 등 다른 오브젝트의 작업이 끝난 후 처리해야 하는 작업에 유용.

OnDisable()

오브젝트가 비활성화될 때 호출된다.
이벤트 해제나 자원 정리 작업을 처리.

OnDestroy()

오브젝트가 제거될 때 호출된다.
메모리 누수를 방지하기 위한 자원 해제 작업에 주로 사용.

테스트 해보기

using UnityEngine;
using UnityEngine.SceneManagement;

public class LifeCycle : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("스타트 awake" + SceneManager.GetActiveScene().name);
    }
    private void OnEnable()
    {
        Debug.Log("스타트 OnEnable"+ SceneManager.GetActiveScene().name);
    }
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("스타트 Start" + SceneManager.GetActiveScene().name);
    }

    private void FixedUpdate()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    private void LateUpdate()
    {
        
    }
    private void OnDisable()
    {
        Debug.Log("스타트 OnDisalbe" + SceneManager.GetActiveScene().name);
    }
    private void OnDestroy()
    {
        Debug.Log("스타트 OnDestroy" + SceneManager.GetActiveScene().name);
    }
    private void OnApplicationQuit()
    {
        
    }

    public void SceneButton2()
    {
        SceneManager.LoadScene("SampleScene2");
    }
    public void SceneButton1()
    {
        SceneManager.LoadScene("SampleScene");
    }
}

이러한 순서대로 로그가 찍히는것을 볼수있다.
플레이어 공격은 내가 커맨드패턴을 연습하다 로그가 찍힌것

내가 배운 점

생명주기 메서드의 호출 순서를 정확히 이해하면 의도치 않은 버그를 예방할 수 있다.
Update와 FixedUpdate를 적절히 구분해서 사용해야 한다는 점을 다시 한번 상기.
Awake와 Start의 차이를 명확히 이해하면 초기화 순서 관련 문제를 줄일 수 있다.

참고한 자료

Unity 공식 문서: https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html

profile
게임개발자꿈나무

0개의 댓글