반응형

 

 

"Unity의 생명주기(Life Cycle)"

 

개발을 하다보면 코드의 실행순서  때문에 버그가 생기는 순간이 많다.

 


Unity에서는 특히 Awake, Start, Update 같은 MonoBehaviour 콜백이 어떤 순서로 호출되는지를 정확히 아는 것이 중요하다. 

이것을 Unity에서는 흔히 "생명주기(Life Cycle)"라고 부른다.

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1) 생명주기의 흐름

 


씬 로드/오브젝트 생성 → Awake() → OnEnable() → Start()

 


이후 매 프레임/고정 프레임에서 Update() / FixedUpdate() / LateUpdate() 반복

 


비활성화 시 OnDisable(), 파괴 시 OnDestroy()

 


+++


Awake(): 스크립트 인스턴스가 로드될 때 1회(초기화)

OnEnable(): 활성화될 때마다 호출(여러 번 가능)

Start(): 활성 상태로 처음 업데이트되기 직전 1회

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 


2) Awake / OnEnable / Start 차이

 

Awake()

목적: 내부 초기화, 컴포넌트 캐싱(GetComponent), 기본 값 세팅

특징: 씬 로드 시점에 비교적 “이른” 타이밍에 실행됨

 


다른 오브젝트와의 의존성이 큰 로직은 Start()로 미루는 편이 안전하다.

 

 

 


OnEnable()

목적: 이벤트 구독, 리스너 등록, 코루틴 시작 등 “활성 상태에서만 필요한 것”

특징: SetActive(true) 또는 enabled=true가 될 때마다 호출(여러 번 가능)

 

 



Start()

목적: 다른 오브젝트의 Awake()가 끝난 뒤, 실제 게임 시작 직전에 필요한 초기화

특징: “활성 상태로 처음 Update가 돌기 직전” 1회만 호출

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 



3) Update / FixedUpdate / LateUpdate 차이

Update()

매 프레임 1회 호출

(프레임 속도에 따라 호출 간격이 변함)

주로 입력 처리, 일반 게임 로직, UI 처리에 사용

시간 보정(Time.deltaTime) 사용

 



FixedUpdate()
고정 시간 간격으로 호출(물리 시뮬레이션 타이밍)되며,

프레임 상황에 따라 0~N번 호출될 수 있다.

 

주로 Rigidbody 물리 관련 처리(힘/속도 적용)에 사용

 

시간 보정(Time.fixedDeltaTime) 사용

 

 


LateUpdate()
Update 이후에 호출

주로 카메라 추적(플레이어 이동이 Update에서 끝난 뒤 카메라가 따라가게),

또는 후처리 로직에 사용

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 



4) OnDisable / OnDestroy는 언제 쓰나?

 

 

OnDisable()
오브젝트/컴포넌트가 비활성화될 때 호출이나

이벤트 구독 해제 또는 코루틴 중지/정리에 사용
(OnEnable()에서 등록한 것들을 반드시 해제해야함)


 

 

OnDestroy()
오브젝트가 파괴될 때 호출
(파괴 시점 정리시 이미 참조가 끊겼을 수 있으니 방어적으로 작성해야 함)

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

5) 생명주기 배치 정리

 

 

 


----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

오늘의 한 줄 요약

 

Unity 생명주기는 게임 오브젝트/컴포넌트가 생성~파괴되는 동안

Unity가 자동으로 호출해주는 MonoBehaviour 함수들의 실행 순서이다.

반응형

+ Recent posts