| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 스타일 지침
- 구글플레이콘솔
- 테이블 데이터
- 콘솔 앱
- Unity 기술면접
- 기술면접
- Visual Studio Installer
- 프로젝트 생성
- Canvas Scaler
- 오브젝트 풀
- Abstract Factory Pattern
- New Input System
- MVP 패턴
- 추상 팩토리 패턴
- C#
- Dependency Injection
- 의존성 주입
- unity
- Object Pool
- 구글 스프레드 시트
- 게임 디자인 패턴
- github desktop
- Di
- 데이터 형식
- Render Mode
- 상태 패턴
- event bus
- 유니티
- 개발
- 이벤트 버스
- Today
- Total
DevDino
[Unity 기술면접] Unity 생명주기(Lifecycle) 본문
확실히 구분해야 하는 2가지
★ Awake()와 Start()의 호출 순서, 용도 차이
★ Update()와 FixedUpdate()의 차이
Unity 생명주기(Lifecycle)

Unity에서 MonoBehaviour로 작성한 스크립트는 게임 실행 중에 여러 이벤트 함수(event function)가 미리 정해진 순서대로 호출됩니다. 순서를 이해하면 초기화, 업데이트, 물리 처리, 렌더링, 파괴 시점 등을 명확히 제어할 수 있습니다.
1. 첫 씬 로드 시점
Awake(): 게임 오브젝트가 인스턴스화 된 직후 호출됨. 활성화 상태가 아니면 호출되지 않음. 생명 주기 동안 단 한 번만 호출됨.OnEnable(): 오브젝트 또는 스크립트가 활성화(SetActive(true))될 때 호출됨.Awake나Start와 달리 여러 번 호출될 수 있어, 재사용되는 객체의 상태를 초기화할 때 유용함.
2. 첫 프레임 업데이트 이전
Start(): 활성화된 스크립트에 대해 첫Update직전에 한 번 호출됨.
3. 프레임 루프(업데이트 순서)
FixedUpdate(): 물리 연산을 위한 일정한 시간 간격에 따라 호출됨. 프레임률(fps)과 상관없이 호출 시점이 보장됨.Update(): 매 프레임 호출됨. 메인 게임 로직 처리에 사용됨.LateUpdate():Update가 끝난 뒤 호출됨.Update에서 캐릭터의 이동 연산이 완전히 끝난 후, 카메라가 그 최종 위치를 추적하게 만들어 화면 떨림을 방지할 때 주로 사용됨.
참고: 코루틴(Coroutine)의 yield return null은 보통 Update 로직이 끝난 후, LateUpdate가 호출되기 전 사이 시점에 실행됩니다.
4. 렌더링 단계
OnPreCull(),OnWillRenderObject(),OnPreRender(),OnRenderObject(),OnPostRender()등: 카메라의 컬링, 렌더링 직전/직후 시전에 호출되는 함수들.OnGUI(),OnDrawGizmos()등: GUI 이벤트 처리나 씬 뷰 기즈모 그리기 등에 쓰임.
5. 기타
OnDestroy(): 오브젝트가 파괴되기 전 마지막 프레임에 호출됨.OnApplicationQuit(): 애플리케이션 종료 직전에 호출됨.
Awake vs Start
Awake는 씬 로드/인스턴스화 직후 시점에 가장 먼저 호출됩니다. 여기서 자기 스스로를 초기화하고, ScriptableObject나 정적 데이터의 참조를 설정하는 것이 적합합니다.
Start는 모든 Awake & OnEnable이 다 끝나고, 첫 Update 직전에 호출됩니다. 즉 다른 객체들도 이미 준비된 상태입니다.
그래서 Awake는 내부 상태 초기화(private 변수 초기값 세팅, ScriptableObject 로드 등), Start는 다른 객체에 의존하는 것 초기화(GameManager 찾기, 다른 Component 참조 연결 등)를 하는 단계입니다.
Update vs FixedUpdate
이동 코드를 Update에서 썼다고 가정해보았을 때,
void Update()
{
rigid.AddForce(Vector3.forward * speed);
}
Update는 프레임률에 따라 호출 간격이 변하므로 60fps 환경과 120fps 환경에서 결과가 달라집니다.
(만약 물리 엔진이 아닌 Transform을 이용해 Update에서 이동시킨다면, 프레임 보정을 위해 반드시 Time.deltaTime을 곱해줘야 합니다.)
void FixedUpdate()
{
rigid.AddForce(Vector3.forward * speed);
}
다른 환경에서 같은 결과를 나타내기 위해 코드를 FixedUpdate로 옮겨야 합니다.
요약
★ Awake -> OnEnable -> Start 순으로 실행됨.
★ Update는 프레임마다 호출되고 FixedUpdate는 일정한 주기로 호출됨. 그래서 입력이나 일반 로직은 Update에서 처리하고, 물리 엔진과 관련된 위치/속도 보정은 FixedUpdate에서 처리함.
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] 메서드 Override와 Overload (0) | 2025.12.22 |
|---|---|
| [Unity 기술면접] Draw Call 관리 (1) | 2025.12.18 |
| [Unity 기술면접] Prefab과 Scene 관리 (0) | 2025.12.17 |
| [Unity 기술면접] GameObject와 Component의 관계 (0) | 2025.12.15 |
| [Unity 기술면접] 객체지향 프로그래밍의 4대 원칙 (0) | 2025.12.11 |