Unity의 생명주기

최정훈·2024년 9월 19일

  • Awake: 항상 Start() 매서드 전에 호출되며, 게임 오브젝트가 비활성화된 상태에서도 호출된다. 씬이 로드될 때마다 모든 오브젝트에 대해 한번만 호출된다. 해당 게임 오브젝트에 부착되어있는 스크립트들의 Awake() 메서드가 실행되기 전에는 다른 게임 오브젝트나 컴포넌트에 의존하는 작업은 하지 않는 것이 좋다.

  • OnEnable: 게임 오브젝트가 활성화 될 때마다 호출된다. 재활성화 시 필요한 작업을 수행하는데 사용된다. 이벤트 등록, 이벤트 리스너 설정, 코루틴 시작 등의 작업에 많이 사용되고, 오브젝트 풀링을 사용할 때도 자주 사용된다.

  • Start: 게임 오브젝트나 컴포넌트를 초기화하는데 사용된다. 다른 스크립트나 컴포넌트에 의존하는 초기화 작업을 수행하는데 사용된다. 또한 Awake()와는 달리 게임 오브젝트가 비활성화된 상태에서는 호출되지 않으며, 게임 오브젝트가 다시 활성화 되더라도 다시 호출되지 않는다.

  • FixedUpdate: 매 물리 프레임마다 호출되며, 주로 물리적인(rigidbody) 움직임을 다루는 것에 사용된다. Unity의 물리 시스템은 일정한 시간 간격에 따라 업데이트 되며, FixedUpdate()도 이 간격에 맞춰 호출된다. 이는 Update()와는 달리 프레임 레이트의 영향을 받지 않기 때문에, 물리 시뮬레이션과 같이 일정한 업데이트 주기가 필요한 작업에 이상적이다.

  • OnTirgger_: 이들은 Collider 컴포넌트가 트리거 모드로 설정되어 있을 때 호출되며, 물리적인 상호작용을 처리하는데 사용된다.

  • OnCollision_: 이들은 물리적인 충돌을 처리하는데 사용되며, Collider 컴포넌트가 트리거 모드로 설정되어 있지 않을 때 호출된다.

  • Update: 매 프레임 호출되며, 주로 게임로직, 상태의 업데이트, 사용자 입력의 처리 등을 수행하는데 사용된다. 게임이 실행되는 동안 매 프레임마다 호출되기 때문에, 이 매서드에서 실행되는 작업들은 가능한 가볍게 유지하는 것이 좋다. 또한, 이는 프레임 레이트에 따라서 호출 간격이 변할 수 있다. 따라서, 이에 종속받지 않게 하기 위해서는 Time.deltaTime을 사용해서 시간 간격을 보정해주는 작업이 필요하다.

  • LateUpdate: 매 프레임마다 호출되지만, Update()매서드가 모두 호출된 이후에 호출된다. 주로 Update()에서 발생한 변화에 대한 후처리를 하는데 사용된다. 주로 카메라, UI의 변화에 사용된다.

  • OnDisable: 게임 오브젝트나 그에 연결된 스크립트가 비활성화될 때 호출된다. 이벤트의 해제, 리스너의 제거, 코루틴의 정지 등의 작업에 주로 사용된다. 이 매서드는 게임 오브젝트나 스크립트가 활성화에서 비활성화로 전환될 때 마다 호출되기 때문에, 비활성화 시 필요한 작업을 수행하는데 적합하다.

  • OnDestroy: 게임 오브젝트나 스크립트가 Destroy() 매서드에 의해 제거되기 직전에 호출된다. 게임 오브젝트가 파괴되는 시점에 특정 행동을 실행하기 위해 이 메서드를 사용할 수 있다.

  • OnApplicationQuit: 유니티 애플리케이션이 종료될 때 호출된다. 게임의 진행 상황을 저장하거나, 네트워크 연결을 종료하거나, 사용한 리소스를 정리하는 등의 작업을 수행할 수 있다. 하지만, 이 매서드가 호출되는 시점은 에디터와 실제 빌드된 애플리케이션에서 다르게 작동할 수 있다. 특히 모바일 디바이스에서 홈 버튼을 눌러 애플리케이션을 백그라운드로 보내는 경우 이 매서드가 호출되지 않을 수 있다. 이런경우, OnApplicationPause() 매서드를 함께 사용해야 할 수 있다.
profile
게임개발자(희망)의 공부일지

0개의 댓글