카테고리 없음

6단원 - 프로젝트 최적화 : Awake()

coding-potato 2024. 11. 26. 14:51

Awake()

Unity에서 제공하는 MonoBehaviour 메서드 중 하나로, 게임 오브젝트가 활성화되기 전에 호출되는 함수입니다. 주로 초기화 작업을 처리하는 데 사용됩니다. Awake()는 Start()보다 먼저 호출되며, 주로 스크립트에서 필요한 변수나 상태를 초기화하는 데 사용됩니다.

Awake의 특징

게임이 시작될 때가 아니라 오브젝트가 Active할 때 생성하려는 특정 값이 있는 경우 Awake() 메서드를 사용합니다.

  1. 게임 오브젝트 활성화 시 호출:
    • 게임 오브젝트가 활성화될 때 최초로 호출됩니다. 이는 해당 오브젝트가 씬에 추가되거나, 해당 스크립트가 활성화될 때 발생합니다.
    • Awake()는 씬 로딩 시 한 번만 호출됩니다.
  2. Start()보다 먼저 호출됨:
    • Awake()는 Start() 메서드보다 먼저 호출됩니다. 즉, 게임 오브젝트가 씬에 추가되거나 활성화되었을 때, 초기화 작업이 먼저 실행되어야 할 경우 Awake()에서 처리합니다.
    • Start()는 모든 Awake()가 호출된 후에 호출됩니다.
  3. 한 번만 호출:
    • 각 컴포넌트의 Awake()는 씬이 시작될 때 한 번만 호출됩니다. 이후에는 호출되지 않으며, 씬이 리셋되거나 오브젝트가 비활성화되고 다시 활성화되는 경우에도 다시 호출되지 않습니다.
  4. 종속성 초기화:
    • 다른 컴포넌트와의 의존 관계가 있을 경우, Awake()에서 의존성 초기화를 완료해야 합니다. 다른 컴포넌트에서의 참조를 설정하거나 초기화 작업을 여기서 처리합니다.

Awake 사용 예제

1. 컴포넌트 초기화

게임 오브젝트에 다른 컴포넌트가 있을 경우, Awake()에서 이를 초기화할 수 있습니다.

Awake()에서 Rigidbody 컴포넌트를 초기화하고, 이후 Start()에서 게임 로직을 처리할 수 있습니다. Awake()는 게임 오브젝트가 활성화될 때 호출되며, Start()는 모든 Awake()가 끝난 후에 호출됩니다.

2. 다른 스크립트와의 의존성 처리

다른 스크립트나 컴포넌트와 의존성이 있을 때 Awake()에서 이를 초기화하거나 참조할 수 있습니다.

Awake()에서 Player 객체를 찾고 초기화합니다. 이처럼 **Awake()**는 의존성을 설정할 때 유용합니다.

Awake와 Start의 차이점

**Awake()**는 주로 초기화 작업을 위해 사용되며, **Start()**는 게임이 시작된 후게임 로직을 처리하는 데 사용됩니다.

Awake 사용 시 유의사항

  1. 상속받은 클래스의 Awake() 호출:
    • 상속받은 클래스에서 Awake()를 오버라이드 할 경우, 부모 클래스의 Awake()를 호출하는 것을 잊지 않아야 합니다. 그렇지 않으면 부모 클래스의 초기화 작업이 실행되지 않을 수 있습니다.

 

  • 컴포넌트의 활성화 상태:
    • Awake()는 게임 오브젝트가 활성화될 때 호출되지만, 컴포넌트가 비활성화되어 있으면 Awake()도 호출되지 않습니다. 컴포넌트가 활성화된 후에 Awake()가 호출됩니다.
  • Awake()와 Start()의 호출 순서:
    • Awake()가 먼저 호출되므로, Awake()에서 초기화한 값Start()에서 사용할 수 있습니다. Awake()는 객체 간 의존성을 설정하고, Start()에서는 그 값을 기반으로 로직을 실행할 수 있습니다.

결론

Awake()는 Unity에서 게임 오브젝트가 활성화될 때 최초로 호출되는 초기화 메서드입니다. 주로 변수 초기화, 컴포넌트 간 의존성 설정, 게임 오브젝트와의 관계 초기화 등을 처리하는 데 사용됩니다. Awake()는 Start()보다 먼저 호출되며, 씬이 로드되거나 객체가 활성화될 때 한 번만 실행됩니다.