Awake와 Start의 차이점

옙권·2025년 4월 21일

Awake()랑 Start() 둘 다 비슷해 보이지만 무엇이 가장 다를지 너무 궁금해서 찾아보았다.

찾아보니 실행순서가 가장 차이가 난다고 한다.

Awake()

Awake()는 Unity에서 MonoBehaviour 클래스의 생명주기 함수 중 하나

게임 오브젝트가 활성화될 때 자동으로 한 번만 호출되며

Start()보다 먼저 실행된다.

컴포넌트가 비활성화(enabled = false)되어도 실행된다.

그래도 SetActive(false) 이 경우 Awake()는 실행되지 않는다.

Awake()는 언제 사용할까?

1) 싱글톤(Singleton) 패턴 설정
(게임에서 한 개만 존재하는 관리 클래스)

public static GameManager Instance;

void Awake()
{
    if (Instance == null)
        Instance = this;
    else
        Destroy(gameObject);
}

2) 다른 스크립트보다 먼저 초기화하고 싶을 때

void Awake()
{
   myData = LoadDataFromFile();  // 먼저 데이터를 로드해둬야 Start()에서 사용 가능
}

3) 컴포넌트나 오브젝트 참조 연결(GetComponent, FindObjectOfType 등)
-다른 컴포넌트보다 먼저 연결하고 싶을 때

void Awake()
{
    rigid = GetComponent<Rigidbody2D>();
}

Start()

Start()는 Unity에서 게임 오브젝트가 활성화된 후 첫 프레임이 시작되기 전에 자동으로 호출되는 메서드

즉, 게임이 시작하자마자 실행되는 준비 코드를 넣는 곳.

  • Awake 다음에 실행

  • 모든 Awake가 끝난 후, 첫 프레임 전에 실행

  • 오브젝트가 활성 상태일 때만 호출됨

Start()는 언제 쓰일까?

1) 초기 로직 실행

void Start()
{
    SpawnEnemies();  // 게임 시작하자마자 몬스터 생성
}

2) UI 표시, 사운드 재생 등 초기 연출

void Start()
{
    titleText.text = "게임 시작";
    backgroundMusic.Play();
}

3) 다른 오브젝트와 상호작용

이때는 Awake()보다 늦게 호출되기 때문에, 상호 참조하기 적합

void Start()
{
    GameManager.Instance.StartGame();
}

Awake()와 Start() 비교하기

Awake()

실행 시점 : 오브젝트가 씬에 활성화될 때 제일 먼저

실행 순서 : 먼저

주 용도 : 데이터 준비, 참조 연결, 게임 로직 시작, 상호작용

호출 횟수 : 한 번

Start()

실행 시점 : 모든 Awake()가 끝나고 첫 프레임 시작 전

실행 순서 : 나중에

주 용도 : 게임 로직 시작, 상호작용

호출 횟수 : 한 번

0개의 댓글