GameObject는 유니티에서 매우 중요하고 핵심적인 개념 중 하나이다. GameObject가 생성되고, 실행되고, 파괴되기 까지 일련의 과정을 생명주기(LifeCycle)라고 한다.
GameObject의 생명주기를 정확히 이해하는 것은, 내부 스크립트의 흐름을 명확히 파악하고, 제어할 수 있다는 것이다.
또한 GameObject 뿐만이 아닌, 전반적인 게임의 초기화, 업데이트, 종료 과정을 효율적으로 관리할 수 있다.
각 메서드의 특징은 최대한 간단하게 하고, 사용하기 좋은 상황 위주로 정리하였다.
1. 초기화 단계
(1) Awake() : 스크립트 인스턴스가 로드될 때 가장 먼저 호출
- 싱글톤 초기화
- 객체 간 참조 설정
- 데이터 로드
(2) OnEnable() : 오브젝트가 활성화 될 때마다 호출
- UI활성화 시 초기화 ( ex: 이벤트 리스너 등록)
- 오브젝트 활성화 시 준비작업
- Coroutine 호출
(3) Start() : Awake() 이후 첫 프레임 전에 한 번 호출
- 외부 의존성 초기화
2. 물리 단계
(1)FixedUpdate() : 일정 시간 간격으로 호출(물리 엔진과 동기화)
- 물리 연산
- Rigidbody를 이용한 이동
- 힘을 가하는 계산
- 물리적 움직임 처리
- 등등
3. 게임 로직 단계
(1) Update() : 매 프레임마다 호출(프레임 속도에 따라 다름 == 컴퓨터에 따라 다름)
- 사용자 입력 처리
- 애니메이션 관리
- 오브젝트 상태 변경
(2) LateUpdate() : Update 이후 호출. 후처리에 적합
- 카메라 위치 조정
- 부모 - 자식 간 위치 동기화
(3)OnGUI() : GUI 이벤트 처리
- GUI 이벤트 처리
- 디버그 정보 출력
4. 비동기 및 코루틴
(1) Coroutine (IEnumerator) : 비동기 작업 처리. yield return을 통해 대기 및 재개.
- 시간 대기
- 조건 대기
- 비동기 다운로드
5. 해체 단계
(1) OnDisable() : 오브젝트가 비활성화될 때 호출
- 이벤트 리스너 해체
- 상태 저장
- UI 비활성 처리
(2) OnDestroy() : 오브젝트 파괴 시 호출
- 씬 전환
- 메모리 정리
- 데이터 정리
- 파일 저장
< 싱글톤을 사용할 때 Awake에서 초기화 하는 이유는 뭘까? >
싱글톤 초기화를 Start()에 두면, 다른 스크립트의 Awake() 또는 Start()에서 싱글톤 인스턴스를 참조할 때 null이 될 수 있기 때문이다.
참고 자료
유니티 공식 문서
https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html
이벤트 함수의 실행 순서 - Unity 매뉴얼
Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.
docs.unity3d.com
'Unity 개발 일지 > Unity 공부' 카테고리의 다른 글
| [내일배움캠프] Unity 배치고사 자가 피드백 (0) | 2025.05.28 |
|---|---|
| GameObject와 MonoBehavior (0) | 2025.05.16 |
| Unity에서 유닛을 판별하는 방법 (0) | 2025.05.02 |
| Mathf 클래스 (0) | 2025.05.01 |
| 프로퍼티와 getter/setter 메서드 (0) | 2025.04.11 |